为何通过类访问方法时inspect.ismethod返回False?
为什么
inspect.ismethod(Foo.bar)返回False? 先看你定义的类和执行的代码:
class Foo: def bar(self): print('bar!')
调用inspect.ismethod的结果:
>>> from inspect import ismethod >>> ismethod(Foo.bar) False
这是Python里函数和方法的本质区别导致的:
- 直接访问
Foo.bar时,它只是一个普通函数,还没有和任何类的实例绑定,inspect.ismethod只识别和实例绑定后的方法对象。 - 只有通过类的实例去访问这个函数时,它才会被包装成绑定方法,这时
ismethod才会返回True。
验证一下就能明白:
>>> from inspect import ismethod, isfunction >>> # 直接取类的bar,属于普通函数 >>> isfunction(Foo.bar) True >>> # 实例化后取bar,才是绑定方法 >>> obj = Foo() >>> ismethod(obj.bar) True
说白了,Foo.bar本身是函数,和实例绑定后才叫方法,所以ismethod(Foo.bar)返回False是完全正常的。
内容的提问来源于stack exchange,提问作者kaya3
相关产品推荐
相关产品推荐

