我正在尝试使用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
答案 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())
您似乎拼错了要检查的变量名称。