Python class属性

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 "", line 1, in 
AttributeError: type object 'CC' has no attribute 'i'
>>> 

可以看出类没有收纳 i 这个属性。进一步说明类属性不受实例属性左右。

你可能感兴趣的:(Python class属性)