什麼是Python Descriptors
只要類中有__get__(), __set__(), 和 __delete__()其中之一的方法.那麼它就是一個描述器.
2.Descriptor有什麼用?
hook對屬性的操作,主要包括取值和賦值。
一般的屬性操作是通過__dict__完成的,這樣不靈活,所以就有了descriptor。
3.如何定義一個descriptor?
最簡單就是直接定義一個類:
#coding=utf-8nclass Integer(object):#Integer就是一個描述器,因為定義了__set__()方法.ntdef __init__(self, name):nttself.name = namentdef __set__(self, instance, value):#因為我們只需要對"修改屬性"這個行為進行hook,所以我們只定義__set__()方法就夠了,不用__get__()和__delete__().nttif not isinstance(value, int):ntttraise TypeError(Expected an int)nttinstance.__dict__[self.name] = valuennclass Point(object):ntx = Integer(x)nty = Integer(y)ntdef __init__(self, x, y):nttself.x = xnttself.y = ynnp = Point(2, 3)np.x = 9np.x = 9.9#這句會拋出TypeError: Expected an int錯誤.這就是描述器的作用.n
4. 有沒有更方便的方式?
可以用property方法,它的四個參數是get_method, set_method, del_method, doc_string,返回的是一個descriptor。
5. @property和property方法有什麼關係?@property就是裝飾器版本的property,本質一樣。
參考資料:
python中descriptor(描述器)就是這麼回事 - 推酷如何理解 Python 的 Descriptor?使用@property
推薦閱讀:
※如何零基礎自學入門Python
※學 Python 發現學一門編程語言很難,有哪些學好編程的方法或技巧?
※selenium驅動器配置詳解
TAG:Python |