类属性和实例属性
python是动态加载属性的。
python会优先查找实例属性,然后在查找类属性。
class A(object):
a = 1
o1 = A()
o2 = A()
# (1)
print(o1.a, o2.a, A.a)
# (1, 1, 1)
# (2)
o1.a = 2
print(o1.a, o2.a, A.a)
# (2, 1, 1)
# (3)
A.a = 3
print(o1.a, o2.a, A.a)
# (2, 3, 3)
(1):此时o1和o2是都没有实例属性的,所以继续向上查找类属性得到a = 1
(2):对o1.a赋值,此时才会给o1一个实例属性
print(o1.__dict__, o2.__dict__)
# ({'a': 2}, {})
(3):因为o1先找到了实例属性,所以不会改变a的值