標籤:
python類和對象的屬性分為類屬性和對象屬性兩大類,類屬性屬於類,而對象屬性屬於對象。
1. 父類的對象屬性會被子類的對象繼承。
2. 父類的類屬性會被子類繼承,還是作為類屬性,如果父類改變了類屬性,父類和子類的類屬性都會被改變。
3. 子類繼承父類的類屬性可以通過類名+屬性名稱使用,但是一旦發生賦值,就會新定義一個相同名字的子類自己的類屬性。
4. 類的對象可以通過對象名+屬性名稱使用類屬性,但是一旦發生賦值,就會新定義一個相同名字的對象屬性,而且不會被繼承。
eg:
>>> class A(object):... value = 1 #類屬性... def __init__(self):... self.value2 = 2 # 對象屬性... >>> a = A()>>> print a.__dict__{‘value2‘: 2}>>> print A.__dict__{‘__module__‘: ‘__main__‘, ‘value‘: 1, ‘__dict__‘: <attribute ‘__dict__‘ of ‘A‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘A‘ objects>, ‘__doc__‘: None, ‘__init__‘: <function __init__ at 0x10fcd1de8>}>>> a.value = 2 #新定義了的對象屬性,不再是A的類屬性>>> A.value 1>>> print a.__dict__{‘value2‘: 2, ‘value‘: 2}>>> class B(A):... value_B = 3... >>> b = B()>>> print b.__dict__{‘value2‘: 2}>>> print B.__dict__{‘__module__‘: ‘__main__‘, ‘__doc__‘: None, ‘value_B‘: 3}>>> B.value1>>> B.value = 5 #新定義了B的類屬性,不再是繼承自A的類屬性。>>> A.value1>>> print B.__dict__{‘__module__‘: ‘__main__‘, ‘__doc__‘: None, ‘value‘: 5, ‘value_B‘: 3}>>>
注意:Python中的屬性是分層定義的,當我們需要調用某個屬性的時候,Python會一層層向上遍曆,直到找到那個屬性。(某個屬性可能出現再不同的層被重複定義,Python向上的過程中,會選取先遇到的那一個,也就是比較低層的屬性定義)。
python 類和對象的屬性