標籤:

什麼是Python Descriptors

1. 如何定義一個Descriptor?

只要類中有__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 |