真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中反射和描述器總結(jié)-創(chuàng)新互聯(lián)

反射

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、良慶網(wǎng)站維護、網(wǎng)站推廣。

在Python中,能夠通過一個對象,找出type、class、attribute或者method的能力,成為反射。

函數(shù)與方法

內(nèi)建函數(shù):

getattr(object,name[,degault]) 通過name返回object的屬性值,當屬性不存在,將使用default返回,如果沒有default,則拋出AttributeError。Name必須為字符串。

setattr(object,name,value) object的屬性存在,則覆蓋,不存在,新增。

hasattr(object,name) 判斷對象是否有這個名字的屬性,name必須為字符串

反射相關(guān)的魔術(shù)方法

__getattr__()

一個類的屬性會按照繼承關(guān)系找,如果找不到,就會執(zhí)行__getattr__()方法,如果沒有這個方法,就會拋出AttributeError異常表示找不到屬性。

查找順序為:

Instance.__dict__-->instance.__class__.__dict__-->繼承的祖先類(直到object)的__dict__---找不到--> 調(diào)用__getattr__()

__setattr__()

可以攔截對實例屬性的增加、修改操作,如果要設(shè)置生效,需要自己操作實例的__dict__

__delattr__()

可以阻止通過實例刪除屬性的操作,但是通過類依然可以刪除屬性。

__getattribute__()

實例的所有的屬性訪問,第一個都會調(diào)用__getattribute__方法,它阻止了屬性的查找,該方法應(yīng)該返回值或者拋出一個AttributeError異常

它的return值將作為屬性查找的結(jié)果

如果拋出AttributeError異常,則會直接調(diào)用__gutattr__方法,因為表述屬性沒有找到。

__grtattribute__方法中為了避免在該方法中無限的遞歸,他的實現(xiàn)應(yīng)該永遠調(diào)用基類的同名方法以訪問需要的任何屬性,例如:object.__getattribute__(self,name)。一般不使用該方法

魔術(shù)方法

__getattr__()

當通過搜索實例、實例的類及祖先類查不到屬性,就會調(diào)用此方法

__setattr__()

通過.訪問實例的屬性,進行增加,修改都要調(diào)用它

__delattr__()

當通過實例來刪除屬性時調(diào)用此方法

__getattribute__()

實例所有的屬性調(diào)用都從這個方法開始

屬性查找順序:

實例調(diào)用__getattribute__() --> Instance.__dict__-->instance.__class__.__dict__-->繼承的祖先類(直到object)的__dict__---找不到--> 調(diào)用__getattr__() 。

描述器:

描述器定義

在python中,一個類實現(xiàn)了__get__、__set__、__delete__三個方法中的任何一個方法,就是描述器。

如果僅實現(xiàn)了__get__,就是非數(shù)據(jù)描述符non-data descriptor

同時實現(xiàn)了__get__,__set__就是數(shù)據(jù)描述符 data descriptor

如果一個類的類屬性設(shè)置為描述器實例,那么它被稱為owner屬主

屬性查找順序

實例的__dict__優(yōu)先于非數(shù)據(jù)描述器,數(shù)據(jù)描述器優(yōu)先于實例的__dict__

有__delete__方法有同樣的效果,有了這個方法,也是數(shù)據(jù)描述器。

描述器在python中應(yīng)用非常廣泛,python的方法(包括staticmethod()和class method())都實現(xiàn)為非數(shù)據(jù)描述器,因此,實現(xiàn)可以重新定義和覆蓋方法。這允許單個實例獲取與同一個類的其他實例不同的行為。

Python中property()函數(shù)實現(xiàn)為一個數(shù)據(jù)描述器。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)頁名稱:Python中反射和描述器總結(jié)-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://weahome.cn/article/cseehp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部