有人可以解釋一下python的Descriptor知識嗎?
回複內容:
舊文搬運:
>>> class MyInt(int): ... def square(self): ... return self*self ... >>> n = MyInt(2) >>> n.name = 'two' >>> n.square() 4 >>> n.name 'two'
簡單來講,描述符就是一個Python對象,但這個對象比較特殊,特殊性在於其屬性的訪問方式不再像普通對象那樣訪問,它通過一種叫描述符協議的方法來訪問。這些方法包括__get__、__set__、__delete__。定義了其中任意一個方法的對象都叫描述符。舉個例子:
普通對象
class Parent(object): name = 'p'class Person(Parent): name = "zs"zhangsan = Person()zhangsan.name = "zhangsan"print zhangsan.name#>> zhangsan
以為是Python3.4裡新加的什麼牛逼功能,還和單繼承聯絡起來了。嚇得我趕緊翻了一下文檔。
Descriptor就是一類實現了__get__(), __set__(), __delete__()方法的對象。沒了。就這樣了。沒看懂的話去學習一下duck typing。
用途就很多了。把函數封裝成property,把property封裝成private property等等。圖片python裝飾器文法,foo函數被裝飾後,不再是原函數,
@logger是foo=logger(foo) 的文法糖,
foo是logger(foo)的傳回值inner,inner是一個函數,foo(5)
等於inner(5).inner函數的形式參數是可變長度參數*args,**kwargs,
隨便你傳元組形式或字典形式的資料都可以。
兩篇拙文,入門級水平
簡明Python魔法
-1
簡明Python魔法
-2