Что такое тип оболочки метода в 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
представляется типом любого магического метода undefined для класса (поэтому __le__
, __repr__
, __str__
и т.д., если он явно не определен, также будет иметь этот тип).
Мне интересно, как класс method-wrapper
используется Python. Все ли "стандартные реализации" методов для класса просто экземпляры этого типа?