两个原因:
API查找仅查看 类型 。他们不看
self.foo.__hash__
,他们寻找type(self.foo).__hash__
。少看一本字典。C插槽查找比纯Python属性查找(将使用
__getattribute__
)快。而是完全在C中绕过来查找方法对象(包括描述符绑定)__getattribute__
。
因此,您必须在
type(self._foo).__hash__本地缓存查找,即使这样,调用也不会像从C代码中那样快。如果速度非常宝贵,请坚持使用标准库功能。
另一个原因,以避免直接调用魔术方法是比较运营商做 更多的 不仅仅是通话一个魔术方法; 这些方法也反映了版本;对于
x <y,如果
x.__lt__未定义或
x.__lt__(y)返回
NotImplemented单例,
y.__gt__(x)则也请参考。



