检查猴子修补方法的身份

时间:2015-05-06 11:09:33

标签: python monkeypatching

在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

1 个答案:

答案 0 :(得分:1)

是的,使用修补方法的__func__属性:

>> type(a.c.__func__)
<class 'function'>
>> a.c.__func__ is c
True