@property
類的靜態(tài)屬性,封裝內(nèi)部具體實(shí)現(xiàn)細(xì)節(jié),調(diào)用的時候類似調(diào)用數(shù)據(jù)屬性。既可以訪問類屬性,也可以訪問實(shí)例屬性

              
                  ![](https://s1.51cto.com/images/blog/201906/08/6de11e5b657bbb1c6e02f4ed64821fa7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
              
            

@classmethod
類方法

              
                  ![](https://s1.51cto.com/images/blog/201906/08/d36f46a721750e99047808d30276f111.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
              
            

@staticmethod
類的工具包,不能使用類變量和實(shí)例變量

Python- 反射 及部份內(nèi)置屬性方法_第1張圖片

繼承順序

Python- 反射 及部份內(nèi)置屬性方法_第2張圖片

第二種

Python- 反射 及部份內(nèi)置屬性方法_第3張圖片

繼承、多態(tài)、封裝

多態(tài):在不同的類實(shí)例化得到的對象,調(diào)用同一個方法,執(zhí)行的邏輯不同

封裝
封裝數(shù)據(jù) :將數(shù)據(jù)隱藏起來這不是目的。隱藏起來然后對外提供操作該數(shù)據(jù)的接口,然后我們可以在接口附加上對該數(shù)據(jù)操作的限制,以此完成對數(shù)據(jù)屬性操作的嚴(yán)格控制。
封裝方法 :目的是隔離復(fù)雜度

封裝在于明確區(qū)分內(nèi)外,使得類實(shí)現(xiàn)者可以修改封裝內(nèi)的東西而不影響外部調(diào)用者的代碼;而外部使用用者只知道一個接口(函數(shù)),只要接口(函數(shù))名、參數(shù)不變,使用者的代碼永遠(yuǎn)無需改變。這就提供一個良好的合作基礎(chǔ)——或者說,只要接口這個基礎(chǔ)約定不變,則代碼改變不足為慮。

反射

反射 主要是指程序可以訪問、檢測和修改它本身狀態(tài)或行為的一種能力(自省)。

`getattr(object, name, default=None)```:判斷object中有沒有一個name字符串對應(yīng)的方法或?qū)傩?

Python- 反射 及部份內(nèi)置屬性方法_第4張圖片

hasattr(object,'name') - 檢測是否含有某屬性 

Python- 反射 及部份內(nèi)置屬性方法_第5張圖片

setattr(object,name,True)  - 設(shè)置屬性\

Python- 反射 及部份內(nèi)置屬性方法_第6張圖片

delattr(object,'name') - 刪除屬性

Python- 反射 及部份內(nèi)置屬性方法_第7張圖片

基于反射- 動態(tài)導(dǎo)入模塊

Python- 反射 及部份內(nèi)置屬性方法_第8張圖片

內(nèi)置屬性方法

getattr delattr , setattr

getattr :一個對象在調(diào)不存在的屬性時候,就會自動觸發(fā)。
Python- 反射 及部份內(nèi)置屬性方法_第9張圖片

delattr : 一個對象刪除類屬性或?qū)ο髮傩詴r候,會觸發(fā)

setattr : 在設(shè)置屬性或新增屬性時候,默認(rèn)就會觸發(fā) setattr ,如果在創(chuàng)建類的時候重新定義了 setattr 方法,要寫上操作屬性字典代碼,不寫就增加屬性不成功
Python- 反射 及部份內(nèi)置屬性方法_第10張圖片

利用上述幾個內(nèi)置方法,可以二次加工標(biāo)準(zhǔn)類型。比如重新定義 setattr ,在新增屬性之前加點(diǎn)自定義參數(shù)

包裝一個類型通常是對已存在的類型的一些定制,這種做法可以新建,修改或刪除原有產(chǎn)品的功能。其它的則保持原樣。授權(quán)的過程,即是所有更新的功能都是由新類的某部分來處理,但已存在的功能就授權(quán)給對象的默認(rèn)屬性。

實(shí)現(xiàn)授權(quán)的關(guān)鍵點(diǎn)就是覆蓋 getattr 方法

Python- 反射 及部份內(nèi)置屬性方法_第11張圖片

setitem,getitem,delitem 用字典方式調(diào)用屬性的時候就會觸發(fā)。如:kk['name']

用點(diǎn)(.)方式調(diào)用屬性會觸發(fā) getattr 等方法。如:kk.name

str , repr ,:改變對象的字符串顯示 str , repr
自定制格式化字符串 format

str函數(shù)或者print函數(shù)--->obj. str ()
repr或者交互式解釋器--->obj. repr ()
如果 str 沒有被定義,那么就會使用 repr 來代替輸出
注意:這倆方法的返回值必須是字符串,否則拋出異常

slots

slots 是一個類變量,變量值可以是列表,元祖,或者可迭代對象,也可以是一個字符串(意味著所有實(shí)例只有一個數(shù)據(jù)屬性)

使用點(diǎn)來訪問屬性本質(zhì)就是在訪問類或者對象的 dict 屬性字典(類的字典是共享的,而每個實(shí)例的是獨(dú)立的),字典會占用大量內(nèi)存,如果有一個類,屬性很少,但是實(shí)例很多,為了節(jié)省內(nèi)存可以使用 slots 取代實(shí)例的 dict 。(可以說是用來作為一個內(nèi)存優(yōu)化工具)

定義了 slots 后的類不再 支持一些普通類特性了,比如多繼承

Python- 反射 及部份內(nèi)置屬性方法_第12張圖片

del

析構(gòu)方法,當(dāng)對象在內(nèi)存中被釋放時,自動觸發(fā)執(zhí)行。

注:如果產(chǎn)生的對象僅僅只是python程序級別的(用戶級),那么無需定義 del ,如果產(chǎn)生的對象的同時還會向操作系統(tǒng)發(fā)起系統(tǒng)調(diào)用,即一個對象有用戶級與內(nèi)核級兩種資源,比如(打開一個文件,創(chuàng)建一個數(shù)據(jù)庫鏈接),則必須在清除對象的同時回收系統(tǒng)資源,這就用到了 del

next iter 實(shí)現(xiàn)迭代器協(xié)議

Python- 反射 及部份內(nèi)置屬性方法_第13張圖片