描述器是一個類,這個類實現了__get__
和__set__
,__delete__
方法的類,其做用就是能夠將一個類以變量的形式調用,看例子:web
class WebFramework(object): def __init__(self, name='Flask'): self.name = name def __get__(self, instance, owner): return self.name def __set__(self, instance, value): self.name = value class PythonSite(object): webframework = WebFramework()
這是在網上找的一個例子,能夠看出WebFramework是一個描述器,在PythonSite中,咱們建立了一個WebFramework的實例,而後咱們來看看如何使用描述器:ide
In [1]: PythonSite.webframework Out[1]: 'Flask' In [2]: PythonSite.webframework = 'Tornado' In [3]: PythonSite.webframework Out[3]: 'Tornado'
能夠看出,webframework就如同PythonSite的一個變量同樣,賦值取值都是相似變量相似,在獲取值的時候調用描述器類的__get__
函數,在賦值時調用__set__
函數,這就是目前我理解的描述器的做用:將一個類包裝爲一個變量來使用。函數