学习目标:

Python 学习

  • Python 类变量

开源代码里,经常能看到大佬们,在创建类的时候,定义类变量。并在此基础上,进行代码开发。故测试一下类变量性质


学习内容:

  1. 创建类变量
  2. 通过类名访问类变量
  3. 通过实例名访问类变量
  4. 双下划线隐藏变量
  5. 修改类变量

代码分析:

  • 创建类变量
class Test01:
	test01_variable = 'test01'

上面就在类中创建了,属于该类对象的一个类变量名为test01_variable

  • 通过类名访问类变量
print(Test01.test01_variable)

输出:

test01
  • 通过实例名访问类变量
test_object = Test01()
print(test_object.test01_variable)

输出:

test01
  • 通过双下划线隐藏

有些大佬写的时候,定义为双下滑线开头的变量。
同在类的实例中定义的一致,双下滑线可以隐藏变量,不被外部调用。

class Test01:
	test01_variable = 'test01'
	__test01_variable = '__test01'

上面再创建一个双下划线的变量。

print(Test01.__test01_variable)

输出:

AttributeError: type object 'Test01' has no attribute '__test01_variable'

可见,带双下滑线的无法被访问到,起到了隐藏作用。
但同样,可以用以下方法,绕开这个隐藏。

print(Test01._Test01__test01_variable)

输出:

__test01
  • 修改类变量
    修改类的变量,会影响类实例
Test01.test01_variable = 'hello world'
print(Test01.test01_variable)
print(test_object.test01_variable)

输出:

hello wolrd
hello wolrd

修改类实例的类变量,不影响类的变量

test_object.test01_variable = 'hello peter'
print(Test01.test01_variable)
print(test_object.test01_variable)

输出:

hello wolrd
hello peter

有趣的来了!!!
这时候在修改类的变量

Test01.test01_variable = 'hello linda'
print(Test01.test01_variable)
print(test_object.test01_variable)

输出:

hello linda
hello peter

发现这时候,修改类的变量,不会影响到类实例test_object中类变量的值!


这是为什么呢?!
想到python万物皆对象,可以通过id()函数打印对象的id
于是,该写代码如下:

print('-'*66)
print(Test01.test01_variable)
print(id(Test01.test01_variable))
print(test_object.test01_variable)
print(id(test_object.test01_variable))

#双杠变量不能打印
# print('-'*66)
# print(Test01._Test01__test01_variable)

print('-'*66)
Test01.test01_variable = 'hello wolrd'
print(Test01.test01_variable)
print(id(Test01.test01_variable))   
print(test_object.test01_variable)
print(id(test_object.test01_variable))   

print('-'*66)
test_object.test01_variable = 'hello peter'
print(Test01.test01_variable)
print(id(Test01.test01_variable))   
print(test_object.test01_variable)
print(id(test_object.test01_variable)) 

print('-'*66)
Test01.test01_variable = 'hello linda'
print(Test01.test01_variable)
print(id(Test01.test01_variable))   
print(test_object.test01_variable)
print(id(test_object.test01_variable)) 

输出:

------------------------------------------------------------------
test01
140186962399664
test01
140186962399664
------------------------------------------------------------------
hello wolrd
140186964195504
hello wolrd
140186964195504
------------------------------------------------------------------
hello wolrd
140186964195504
hello peter
140186964195568
------------------------------------------------------------------
hello linda
140186964195632
hello peter
140186964195568
  1. 可以看到每次调用Test01.test01_variable 指向的id不一样。
  2. 当类实例对类变量test01_variable赋值之后,指向的id相同。
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐