1. 程式人生 > >【Python046--魔法方法:描述符】

【Python046--魔法方法:描述符】

一、描述符的定義:

描述符就是將特殊型別的類的例項指派給另外一個類的屬性

1、舉例:

特殊型別的類要實現以下三個方法中的其中一個或者全部實現

* __get__(self,instance,owner)

 --用於訪問屬性,它返回屬性的值

* __set__(self,instance,value)

  --用於設定屬性,不返回任何內容

* __delete__(self,instance)

  --控制刪除操作,不返回任何內容

class MyDecriptor:
    def __get__(self,instance,owner):
        
#列印檢視描述符的get,set,delete方法中各個引數的含義 print("getting...",self,instance,owner) def __set__(self,instance,value): print("setting...",self,instance,value) def __delete__(self,instance): print("deleteing...",self,instance) class Test: #把特殊類MyDecriptor的例項指派給Test類的x屬性 x = MyDecriptor() 執行結果:
>>> test = Test() >>> test.x getting... <__main__.MyDecriptor object at 0x10a2186d8> <__main__.Test object at 0x10a208f60> <class '__main__.Test'> >>> test <__main__.Test object at 0x10a208f60> >>> Test <class '__main__.Test'> ''' |--由打印出來的getting...,可以看出來,引數self是MyDecriptor的物件(<__main__.MyDecriptor object at 0x10a2186d8>) |--引數instance是Test的物件(<__main__.Test object at 0x10a208f60>) |--引數owner是Test的本類自己(<class '__main__.Test'>) |--具體可由物件test打印出來的內容,和Test類打印出來的內容得到驗證 |--set和delete同理
''' >>> test.x = "X-man" setting... <__main__.MyDecriptor object at 0x10a2186d8> <__main__.Test object at 0x10a208f60> X-man >>> del test.x deleteing... <__main__.MyDecriptor object at 0x10a2186d8> <__main__.Test object at 0x10a208f60> >>>

2、二次舉例:實現property