Что такое тип оболочки метода в 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. Все ли "стандартные реализации" методов для класса просто экземпляры этого типа?