Проверка идентичности методов, исправленных обезьянами

После того, как обезьяна исправит класс новым методом в python, можно ли проверить подлинность этого метода?

После назначения функции в качестве метода я не могу найти способ проверить ее подлинность. Все сравнения возвращают False:

In [1]: class A(object):
   ...:     pass
   ...:

In [2]: a = A()

In [3]: def b(inst):
   ...:     pass
   ...:

In [4]: A.c = b

In [5]: a.c is b
Out[5]: False

In [6]: a.__class__.c is b
Out[6]: False

In [7]: A.c is b
Out[7]: False

In [8]: type(b)
Out[8]: function

In [9]: type(a.c)
Out[9]: instancemethod

In [10]: type(a.__class__.c)
Out[10]: instancemethod

In [11]: type(A.c)
Out[11]: instancemethod

person ARF    schedule 06.05.2015    source источник
comment
Питон 2, я полагаю?   -  person vaultah    schedule 06.05.2015
comment
Примечание: проблема в том, что методы реализованы в виде дескрипторов. Каждый раз, когда вы обращаетесь к одному из них, создается новый объект, который обертывает фактическую функцию, поэтому даже x.method is x.method не удастся.   -  person Bakuriu    schedule 06.05.2015
comment
@vaultah питон 2 и питон 3.   -  person ARF    schedule 06.05.2015


Ответы (1)


Да, используйте свойство __func__ исправленного метода:

>> type(a.c.__func__)
<class 'function'>
>> a.c.__func__ is c
True
person toriningen    schedule 06.05.2015