dir()和__dict__的區(qū)別

__dict__與dir()的區(qū)別

dir()是一個函數(shù),返回的是list;

__dict__是一個字典,鍵為屬性名,值為屬性值;

dir()用來尋找一個對象的所有屬性,包括__dict__中的屬性,__dict__是dir()的子集;

實例的__dict__僅存儲與該實例相關(guān)的實例屬性,

正是因為實例的__dict__屬性,每個實例的實例屬性才會互不影響。

類的__dict__存儲所有實例共享的變量和函數(shù)(類屬性,方法等),類的__dict__并不包含其父類的屬性。

dir()函數(shù)

? dir()是Python提供的一個API函數(shù),dir()函數(shù)會自動尋找一個對象的所有屬性(包括從父類中繼承的屬性)。

? 一個實例的__dict__屬性僅僅是那個實例的實例屬性的集合,并不包含該實例的所有有效屬性。所以如果想獲取一個對象所有有效屬性,應(yīng)使用dir()。

結(jié)論

dir()函數(shù)會自動尋找一個對象的所有屬性,包括__dict__中的屬性。

__dict__是dir()的子集,dir()包含__dict__中的屬性。

  1) 內(nèi)置的數(shù)據(jù)類型沒有__dict__屬性

  2) 每個類有自己的__dict__屬性,就算存著繼承關(guān)系,父類的__dict__ 并不會影響子類的__dict__

  3) 對象也有自己的__dict__屬性, 存儲self.xxx 信息,父子類對象公用__dict__

__getattr__與__setattr__區(qū)別:

結(jié)論

__getattr__為內(nèi)置方法,當(dāng)使用點號獲取實例屬性時,如果屬性不存在就自動調(diào)用__getattr__方法

__setattr__當(dāng)設(shè)置類實例屬性時自動調(diào)用,如j.name=5 就會調(diào)用__setattr__方法? self.[name]=5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容