class的属性分两种:类属性和实例属性
>>> class AA(object):
... x = 1
...
>>> AA.x #类属性
1
>>> aa = AA()
>>> aa.x #实例属性
1
属性为不可变对象
实例属性不影响类属性:
>>> aa.x += 1
>>> aa.x
2
>>> AA.x
1
类属性影响实例属性:
>>> AA.x += 1
>>> AA.x
2
>>> aa.x
2
属性为可变对象
>>> class BB(object):
... y = [1,2,3]
类属性和实例属性相互影响:
>>> bb = BB()
>>> BB.y.append(4)
>>> BB.y
[1, 2, 3, 4]
>>> bb.y
[1, 2, 3, 4]
>>> bb.y.append('aa')
>>> bb.y
[1, 2, 3, 4, 'aa']
>>> BB.y
[1, 2, 3, 4, 'aa']
添加属性
添加类属性,会影响到实例属性:
>>> class CC(object):
... g = 3
...
>>> cc = CC()
>>> CC.h = 4
>>> cc.h
4
添加实例属性,不会影响到类属性:
>>> cc.i = 5
>>> CC.i
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'CC' has no attribute 'i'
>>>
可以看出类没有收纳 i 这个属性。进一步说明类属性不受实例属性左右。