我尝试使用python inspect模块检查源代码。我在本例中检查的代码示例如下:
class xxx:
def __init__(self):
pass
def xxxmethod(self):
pass
我希望当我检查这个代码并检查'xxxmethod'的类型时types.MethodType. 正如建议的here,我使用它来接收函数元素:
^{pr2}$但它的类型是类型.函数类型而不是types.MethodType. 在
当我使用getmembers()打印类元素的内容时
('xxxmethod', <function xxxmethod at 0x00000000028EC6C8>)
这是字典中的元素。在
它到底为什么会这样?我忽略了什么吗?在
编辑:从作用域字典接收class_元素。这是否与这不是类的实例有关?在
谢谢!在
python2和python3在这方面有所不同。在
在Python 2中,您将得到一个:
但如果你打印了这个方法,它会给出:
^{pr2}$在Python 3中,您将得到:
归根结底,这是因为您在类上查找方法。在
在Python2中,通过类访问方法将返回称为未绑定方法的内容。在python3中取消了非绑定方法的概念。在
现在,如果实际上创建了类的实例,那么在Python 2中,您将再次获得:
如果你把它打印出来的话:
在Python 3中:
它相当于Python 2中的instance方法,类似地打印为:
所以是的,这是因为您没有在类的实例上查找方法。Python3不再有未绑定方法的概念,这使我们更加困惑。在
相关问题 更多 >
编程相关推荐