Python检查ismethod

时间:2014-12-16 15:54:32

标签: python

我正在尝试使用inspect来查明foo是否是对象test_me的方法。我希望它返回True或False。这就是我的尝试。

import inspect

class Object:
    pass

test_me = Object()

inspect.ismethod(test.foo())

这给了我错误。我期待返回虚假。

Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    inspect.ismethod(o.foo())
AttributeError: Object instance has no attribute 'foo'

然后,如果我试试这个:

class Object:
    def foo(self,x):
        return x
test_me = Object()

inspect.ismethod(test_me.foo(5)) # return false.

我怎么能:

1。)在第一个例子中检查对象的inspect.ismethod,我可以得到True或False。

2。)然后在第二个例子中如何使foo成为对象的方法并且inspect.ismethod返回True

3 个答案:

答案 0 :(得分:2)

在第一种情况下,检查foo是否存在,然后再检查它是否为方法:

>>> hasattr(test, 'foo')
False

在第二种情况下,不要调用该方法,只需传递它:

>>> inspect.ismethod(test.foo)
False

所以一起,

hasattr(test, 'foo') and inspect.ismethod(test.foo)

False,除非foo都存在并且是方法。

答案 1 :(得分:2)

第一个代码引发异常,因为代码试图访问不存在的属性(方法)。您可以使用带有后备默认值的getattr解决此问题。 (None可以,因为None不是方法)

getattr(test_me, 'foo', None)

第二个代码返回False,因为代码传递了方法调用的返回值(x或5),而不是方法本身。

inspect.ismethod(test_me.foo)

因此,最终代码应如下所示:

inspect.ismethod(getattr(test_me, 'foo', None))

答案 2 :(得分:-3)

尝试

inspect.ismethod(test_me.foo())

您似乎拼错了要检查的变量名称。