Метод Python -тип оболочки?

Каков тип оболочки метода -в 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. Являются ли все «реализации по умолчанию» методов класса просто экземплярами этого типа?

32
задан Adam Parkin 3 May 2012 в 16:21
поделиться