Python:测试x是否是特定的方法对象

时间:2017-05-09 02:36:51

标签: python

我有一个看起来像这样的python函数:

def f(x):
    [...]
    g(x)

有时,由于我无法控制的原因x属于<bound method A.b of <A: a>>类型。 g()位于第三方库中,无法处理此参数并引发异常。因此,在调用g()之前我想要做的是测试这种情况并做其他事情:

def f(x):
    [...]
    if x == A.b:
       doSometingElse()
    else:
       g(x)

现在,==似乎不起作用,因为它永远不会成真。如果我的变量x包含方法A.b

,测试的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

当在对象上访问时,类中的函数将转换为绑定方法,或者在类上访问时,将转换为未绑定方法。在Python 2中,两种类型都有一个引用该函数的 func 属性。所以你的测试看起来像:

if x.__func__ is A.b.__func__:

在Python 3中,它更容易一些:

if x.__func__ is A.b:

答案 1 :(得分:-1)

也许尝试尝试除了

之外的尝试
ignoreErrors: false

这将是处理它的最简单方法。