Python 3中的方法包装器类型是什么?如果我这样定义一个类:
class Foo(object):
def __init__(self, val):
self.val = val
def __eq__(self, other):
return self.val == other.val
Run Code Online (Sandbox Code Playgroud)
然后做:
Foo(42).__eq__
Run Code Online (Sandbox Code Playgroud)
我明白了:
<bound method Foo.__eq__ of <__main__.Foo object at 0x10121d0>>
Run Code Online (Sandbox Code Playgroud)
但如果我这样做(在Python 3中):
Foo(42).__ne__
Run Code Online (Sandbox Code Playgroud)
我明白了:
<method-wrapper '__ne__' of Foo object at 0x1073e50>
Run Code Online (Sandbox Code Playgroud)
什么是"方法包装"类型?
编辑:抱歉更准确:class method-wrapper是类型__ne__,就像我做的那样:
>>> type(Foo(42).__ne__)
<class 'method-wrapper'>
Run Code Online (Sandbox Code Playgroud)
而类型__eq__是:
>>> type(Foo(42).__eq__)
<class 'method'>
Run Code Online (Sandbox Code Playgroud)
此外,method-wrapper似乎是类上任何未定义的魔术方法的类型(因此__le__,如果没有明确定义__repr__,则__str__等也将具有此类型).
我感兴趣的是method-wrapperPython 如何使用该类.类的方法的所有"默认实现"都只是这种类型的实例吗?