Python类变量

1.概述

可以发现:python的类变量和C++的静态变量不同,并不是由类的所有对象共享。 类本身拥有自己的类变量(保存在内存),当一个TestClass类的对象被构造时, 会将当前类变量拷贝一份给这个对象,当前类变量的值是多少,这个对象拷贝得到的类变量的值就是多少;而且,通过对象来修改类变量,并不会影响其他对象的类变量的值 ,因为大家都有各自的副本,更不会影响类本身所拥有的那个类变量的值;只有类自己才能改变类本身拥有的类变量的值

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

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

 

posted @ 2020-12-21 14:55  GumpYan  阅读(1314)  评论(0编辑  收藏  举报