重點
python中實例訪問屬性的順序爲:先查找同名的實例屬性並返回值,如果找不到就會查找同名的類屬性並返回值。
class MyClass(object):
name = 'default'
def __init__():
self.age = 18
if __name__ == '__main__':
c = MyClass()
# 訪問的是類屬性 等同於 c.__class__.name
c.name
# 需要注意這是動態創建實例屬性
c.name = 'ww'
print(c.name)
print(c.__class__.name)
# 結果不同分別是 ww 和 default
小結
由於類的訪問順序問題,我們需要特別注意實例在訪問屬性時,盡力避免實例對類屬性的直接訪問,尤其是賦值,因爲賦值是屬於創建類屬性同名的實例屬性。