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 這個屬性。進一步說明類屬性不受實例屬性左右。