por*_*uod 10 python magic-methods
除了为了正确性而绕过任何实例属性之外,隐式特殊方法查找通常也会绕过
__getattribute__()对象的元类的方法.
文档提到了特殊方法,例如__hash__,__repr__和__len__,我从经验中知道它也包括__iter__Python 2.7.
引用相关问题的答案:
"魔术
__methods__()被特别对待:它们被内部分配到类型数据结构中的"插槽"以加速他们的查找,并且只在这些插槽中查找."
为了改善我对另一个问题的回答,我需要知道:具体来说,我们在谈论哪些方法?
您可以在 python3文档中找到答案,其中object.__getattribute__指出:
无条件调用以实现类实例的属性访问。如果该类还定义了
__getattr__(),则不会调用后者,除非__getattribute__()显式调用它或引发 AttributeError。此方法应返回(计算的)属性值或引发 AttributeError 异常。为了避免此方法中的无限递归,其实现应始终调用具有相同名称的基类方法来访问它需要的任何属性,例如 object.__getattribute__(self, name)。笔记
当通过语言语法或内置函数查找作为隐式调用结果的特殊方法时,仍然可能会绕过此方法。请参阅特殊方法查找。
此页还准确解释了这种“机器”的工作原理。从根本__getattribute__上讲,只有当您使用(点)运算符访问属性时才会调用.(也可以hasattr像 Zagorulkin 指出的那样)。
请注意,该页面没有指定隐式查找哪些特殊方法,因此我认为这适用于所有这些方法(您可以在此处找到) 。
| 归档时间: |
|
| 查看次数: |
1450 次 |
| 最近记录: |