Python 学习
开源代码里,经常能看到大佬们,在创建类的时候,定义类变量。并在此基础上,进行代码开发。故测试一下类变量性质
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