本質上看,描述符是乙個類,只不過它定義了另乙個類中屬性的訪問方式。換句話說,乙個類可以將屬性管理全權委託給描述符類。
描述符類基於以下三種特殊方法,換句話說,這三種方法組成了描述符協議:
其中,實現了setter和getter方www.cppcns.com程式設計客棧法的描述符被稱為資料描述符,反之,如果只實現了getter方法,則稱為非資料描述符。
#描述符類
class revealaccess:
def __init__(self, initval = none, name = 'var'):
self.val = initval
self.name = name
def __get__(self, obj, objtype):
print("retrieving", self.name)
return self.val
def __set__(self, obj, val):
print("updating", self.name)
self.val = val
class myclass:
x = revelaccess(10, 'var "x"')
y = 5
m = myclass()
print(m.x)
m.x = 20
print(m.x)
print(m.y)
retrieving var "x"
10updating var "x"
retrieving var "x"
205如果乙個類的某個屬性有資料描述符,那麼每次查詢這個屬性時,都會呼叫描述符的__get__()方法,並返回它的值;同樣,每次在對屬性賦值時,也會呼叫__set__()方法。
當每次使用del類物件.屬性(或者delattr(類物件,屬性))語句時,都會呼叫該方法。
本文標題: 通過例項解析python描述符原理作用
本文位址: /jiaoben/python/299033.html
python 描述 python描述符
在python中,訪問乙個屬性的優先順序順序按照如下順序 1.類屬性2.資料描述符3.例項屬性4.非資料描述符5.getattr 方法。描述符,用一句話來說,就是將某種特殊型別的類的例項指派給另乙個類的屬性 注意 這裡是類屬性,而不是物件屬性 而這種特殊型別的類就是實現了 get set delet...
全域性描述符表解析
全域性描述符表gdt是為了實現32位模式的分段,跟16位模式的分段是乙個概念。只是實現方式不一樣。在32位中,描述乙個段需要以下資訊 我們用64位 8位元組 來標識乙個段的基位址,及其屬性。可是cpu並沒有乙個這樣的64位段暫存器,我們能是用的依然只有16位的段暫存器。而且由於cpu設計缺陷,段暫存...
python 描述符基本
相關資料 python的描述符 下一站,我等你 描述符的本質類 python為開發者提供了乙個非常強大的功能 描述符。那什麼是描述符呢?通過檢視python的官方文件,我們知道把實現了 get set 和 delete 中的其中任意一種方法的類稱之為描述符,描述符的本質是新式類,並且被 的類 即應用...