【发布时间】:2012-10-04 01:45:52
【问题描述】:
除了为了正确性而绕过任何实例属性之外,隐式特殊方法查找通常还会绕过对象元类的
__getattribute__()方法。
The docs提到了__hash__、__repr__和__len__等特殊方法,根据经验我知道它还包括用于Python 2.7的__iter__。
引用an answer to a related question:
“魔术
__methods__()被特殊对待:它们被内部分配到类型数据结构中的“槽”以加快它们的查找速度,它们只在这些槽中查找。”
为了改进我对another question 的回答,我需要知道:我们具体讨论的是哪些方法?
【问题讨论】:
-
哪些方法分配给槽?
-
我认为每个方法都列出了here。无论如何要考虑到,这仅在您使用“其语法”调用该方法时才适用。例如
a+5不会调用__getattribute__,而a.__add__(5)会 调用它。基本上,只要您使用点 (.) 访问属性,就会调用__getattribute__。 -
@Bakuriu:非常有用,谢谢。
-
@Bakuriu:你能把你的cmets放在一个答案中吗?另外,请注意 Python 3 的行为与您描述的相同,但在这一点上有更清晰的文档。
-
@Bakuriu
__getattribute__也使用了hasattr(obj, method)方法
标签: python magic-methods