Python类变量
1.概述
可以发现:python的类变量和C++的静态变量不同,并不是由类的所有对象共享。 类本身拥有自己的类变量(保存在内存),当一个TestClass类的对象被构造时, 会将当前类变量拷贝一份给这个对象,当前类变量的值是多少,这个对象拷贝得到的类变量的值就是多少;而且,通过对象来修改类变量,并不会影响其他对象的类变量的值 ,因为大家都有各自的副本,更不会影响类本身所拥有的那个类变量的值;只有类自己才能改变类本身拥有的类变量的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class TestClass( object ): # 类变量 val1 = 100 def __init__( self ): # 成员变量 self .val2 = 200 def fcn( self , val = 400 ): val3 = 300 self .val4 = val self .val5 = 500 inst = TestClass() print (TestClass.val1) # 100 print (inst.val1) # 100 print (inst.val2) # 200 # print(inst.val3) # AttributeError: 'TestClass' object has no attribute 'val3' # print(inst.val4) # AttributeError: 'TestClass' object has no attribute 'val4' # print(inst.val5) # AttributeError: 'TestClass' object has no attribute 'val5' |
inst访问不到val3、val4、val5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | inst1 = TestClass() inst2 = TestClass() print (TestClass.val1) # 100 print (inst1.val1) # 100 inst1.val1 = 1000 print (inst1.val1) # 1000 print (TestClass.val1) # 100 print (inst2.val1) # 100 # inst2.val1=22222 TestClass.val1 = 2000 # 只有类自己才能改变类本身拥有的类变量的值。 print (inst2.val1) # 2000 没有重新赋值,跟类变量保存一致 print (TestClass.val1) # 2000 print (inst1.val1) # 1000 被重新赋值后,就跟类变量没关系了 inst3 = TestClass() print (inst3.val1) # 2000 |
类方法的作用:(不依赖于对象)
因为只能访问类属性和类方法,所以,可以在对象创建之前如果需要做一些功能(动作),就可以放在类方法中
私有属性只能通过类方法,在类内部进行访问
静态方法:很类似类方法
1.需要装饰器@staticmethod
2.静态方法是无需传递参数(如,cls,self)
3.静态方法里面也只能访问类的属性和方法,而对象的属性和方法是无法访问的(即,用self.xx访问属性和访问方法是不可以的)
4.加载时机同类方法,即在对象还没有创建时,就已经加载了
选D
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步