You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中为何无法直接调用function.mro()?如何显式获取函数对象MRO?

函数对象MRO获取问题解析

问题复现

用户尝试获取函数对象的方法解析顺序(MRO),编写代码如下:

def num():
    return 6


print(type(num).mro())
print(type(num))
print(function.mro())

运行输出:

[<class 'function'>, <class 'object'>]
<class 'function'>
Traceback (most recent call last):
    print(function.mro())
      ^^^^^^^^
NameError: name 'function' is not defined

发现通过type(num).mro()可正常获取MRO,但直接调用function.mro()触发NameError,而int.mro()、dict.mro()等内置类型调用.mro()却能正常工作,需要解释该现象。

原因解释

  • 全局命名空间差异:int、dict这类基础内置类型的名称直接注册在Python的全局命名空间中,因此可以直接通过名称调用.mro()方法。但函数类型并没有在全局命名空间中暴露名为function的标识符,直接引用自然会触发名称未定义错误。
  • 函数类型的正确引用方式:函数对象的实际类型是types.FunctionType,需要先导入types模块才能直接引用这个类型。示例代码如下:
    import types
    
    def num():
        return 6
    
    print(types.FunctionType.mro())  # 输出: [<class 'function'>, <class 'object'>]
    
  • type(num)的作用:type(num)获取的是函数对象num的类型,也就是function类,这相当于通过实例反向获取了类对象,因此能正常调用.mro()方法。

内容的提问来源于stack exchange,提问作者khajaba khangal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:57:33