新聞中心

本文教程操作環(huán)境:windows7系統(tǒng)、Python 3.9.1,DELL G3電腦。
1、順序說明
數(shù)據(jù)描述器 > 實(shí)例屬性 > 非數(shù)據(jù)描述器;實(shí)例屬性 > 類屬性。
當(dāng)存在描述器的時(shí)候,一個(gè)類實(shí)例的查找屬性順序?yàn)椋合炔檎翌惢蚋割愔惺欠裼袛?shù)據(jù)描述器屬性,如果有那么,先訪問數(shù)據(jù)描述器,如果沒有數(shù)據(jù)描述器 --> 那么就會(huì)查找自己實(shí)例的dict屬性,如果dict屬性里面也沒有找到 --> 然后會(huì)在類或父類的非數(shù)據(jù)描述器進(jìn)行查找。
2、實(shí)例
# 例子二 class A: def __init__(self): self.x = 1 def __get__(self, instance, owner): """ 以下兩個(gè)參數(shù)都是「必須參數(shù)」,約定使用 instance: 描述器所在類的實(shí)例 owner:調(diào)用描述器的類 """ return self.x def __set__(self, instance, value): """ 以下兩個(gè)參數(shù)都是「必須參數(shù)」,約定使用 instance: 描述器所在類的實(shí)例 value:用來設(shè)置屬性的值 """ self.x = value def __delete__(self, instance): """ 以下參數(shù)是「必須參數(shù)」,約定使用 instance: 描述器所在類的實(shí)例 """ pass class B: def __init__(self): self.x = 1 def __get__(self, instance, owner): return self.x class C: a = A() b = B() def __init__(self, a, b): self.b = a self.b = b
上面在class C中,分別定義了資料描述器和非資料描述器a,b以及同名的實(shí)例屬性,進(jìn)行以下輸出測(cè)試,發(fā)現(xiàn)實(shí)例c只存在實(shí)例屬性b,不存在實(shí)例屬性a,說明其確實(shí)是被資料描述器,即類屬性a給屏蔽了。
以上就是python描述器的訪問順序,大家如果怕記憶混淆,可以記得數(shù)據(jù)訪問器在最前面就行了。對(duì)于訪問順序的理解,大家不妨運(yùn)行實(shí)例代碼測(cè)試。
當(dāng)前題目:創(chuàng)新互聯(lián)Python教程:python描述器的訪問順序
網(wǎng)頁網(wǎng)址:http://www.dlmjj.cn/article/djchgsp.html


咨詢
建站咨詢
