Python inspect将方法识别为FunctionType,而不是类型.方法类型

2024-06-26 14:16:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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_元素。这是否与这不是类的实例有关?在

谢谢!在


Tags: 模块函数代码self元素类型字典源代码
1条回答
网友
1楼 · 发布于 2024-06-26 14:16:13

python2和python3在这方面有所不同。在

在Python 2中,您将得到一个:

<type 'instancemethod'>

但如果你打印了这个方法,它会给出:

^{pr2}$

在Python 3中,您将得到:

<class 'function'>

归根结底,这是因为您在类上查找方法。在

在Python2中,通过类访问方法将返回称为未绑定方法的内容。在python3中取消了非绑定方法的概念。在

现在,如果实际上创建了类的实例,那么在Python 2中,您将再次获得:

<type 'instancemethod'>

如果你把它打印出来的话:

<bound method A.m of <__main__.A instance at 0x10ae7ad40>>

在Python 3中:

<class 'method'>

它相当于Python 2中的instance方法,类似地打印为:

<bound method A.m of <__main__.A object at 0x10063c6d8>>

所以是的,这是因为您没有在类的实例上查找方法。Python3不再有未绑定方法的概念,这使我们更加困惑。在

相关问题 更多 >