按理講,類屬性改變,類的實例對象這個屬性也應該被改變,但是在python中實際卻不是這樣
class test(): name = 111 a = test() b = test() a.name = 222 test.name = 333 print(a.name,b.name,test.name) 輸出: 222 333 333
這里a.name的值沒有被test.name = 333改變
查看屬性在內存中的位置
print(id(a.name)) print(id(b.name)) print(id(test.name)) 輸出: 140705896729248 2154539206672 2154539206672
再查看對象的屬性
print(a.__dict__) print(b.__dict__) print(test.__dict__) {'name': 222} {} {...'name': 333.....}
所以當操作a對象給name屬性賦值時,創建了a的name屬性,可以理解為這個name已經不是類的屬性而是a對象的屬性了(好繞)
b沒有創建,所以當查詢b.name的時候實際是查的test.name(內存位置相同)
所以類屬性與實例屬性查詢的優先級為: 實例屬性>類屬性 實例屬性沒有是會去查類屬性