Python類屬性與實例屬性理解


按理講,類屬性改變,類的實例對象這個屬性也應該被改變,但是在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(內存位置相同)

所以類屬性與實例屬性查詢的優先級為: 實例屬性>類屬性     實例屬性沒有是會去查類屬性

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM