描述符和虚线查找
描述符是(通常)类的属性并且具有 __get__,__set__ 或 __delete__ 特殊方法的任何对象。
数据描述符包含 __set__ 或 __delete__ 中的任何一个
这些可以控制实例上的虚线查找,并用于实现函数 staticmethod,classmethod 和 property。点查找(例如,类 Foo 查找属性 bar 的实例 foo - 即 foo.bar)使用以下算法:
-
Foo在课堂上被抬起来了。如果它在那里并且它是数据描述符,则使用数据描述符。这就是property如何能够控制对实例中数据的访问,而实例无法覆盖它。如果没有数据描述符那么 -
在实例
__dict__中查找了bar。这就是我们可以使用虚线查找覆盖或阻止从实例调用的方法的原因。如果实例中存在bar,则使用它。如果没有,我们那么 -
在课堂上看看
Fooforbar。如果它是描述符,则使用描述符协议。这是函数(在此上下文中,未绑定方法),classmethod和staticmethod的实现方式。否则它只是返回那里的对象,或者有一个AttributeError