Каков тип оболочки метода -в Python 3? Если я определяю класс так:
class Foo(object):
def __init__(self, val):
self.val = val
def __eq__(self, other):
return self.val == other.val
А затем делаю:
Foo(42).__eq__
я получаю:
<bound method Foo.__eq__ of <__main__.Foo object at 0x10121d0>>
Но если я делаю (в Python 3):
Foo(42).__ne__
я получаю:
<method-wrapper '__ne__' of Foo object at 0x1073e50>
Что такое метод -типа "обертка"?
Редактировать :извините за точность:class method-wrapper
это тип __ne__
, как будто я делаю:
>>> type(Foo(42).__ne__)
<class 'method-wrapper'>
Принимая во внимание, что тип __eq__
это:
>>> type(Foo(42).__eq__)
<class 'method'>
Кроме того, method-wrapper
кажется типом любого неопределенного магического метода в классе (, поэтому __le__
, __repr__
, __str__
и т. д., если они не определены явно, также будут иметь этот тип ).
Что меня интересует, так это то, как класс method-wrapper
используется Python. Являются ли все «реализации по умолчанию» методов класса просто экземплярами этого типа?