【问题标题】:Python introspection: Where does the mro() method live?Python 自省:mro() 方法在哪里?
【发布时间】:2020-02-12 06:45:34
【问题描述】:

我正在尝试对 python 自省有一个基本的了解,在此过程中我发现在这方面有用的mro() 方法提到了here

当我(作为自省练习)尝试使用上述方法和内置的dir() 函数试图找出mro() 可能存在的位置时,但我无法成功。为什么?

这是我的方法:

  • mro() 方法显然无需任何导入即可使用(与 inspect.getmro() 不同,它是 inspect 模块的一部分;例如 str.mro() 返回 [<class 'str'>, <class 'object'>]

  • 由于str.mro() 返回[<class 'str'>, <class 'object'>]mro() 方法应该存在于str 和/或object 中的某个位置。

  • 然而,dir(str)dir(object) 似乎都没有包含 mro() 方法。另外 help() 和 help(str.mro) 也不能启发困惑的内省学生。

【问题讨论】:

    标签: python oop method-resolution-order


    【解决方案1】:

    如果您查看dir(type),您会发现magic method 属性__mro__。引用自here

    类。__mro__

    此属性是在方法解析期间查找基类时考虑的类元组。

    类。mro()

    此方法可以被元类覆盖,以自定义其实例的方法解析顺序。在类实例化时调用,结果存储在mro

    查看this answer 了解更多关于type 的信息,这是Python 中常用的元类。从那里引用:

    type 是 Python 中常用的元类。 type 本身就是一个类,它是它自己的类型。您将无法纯粹在 Python 中重新创建像 type 这样的东西,但 Python 会作弊。要在 Python 中创建自己的元类,您真的只想继承 type

    【讨论】:

    猜你喜欢
    • 2016-08-10
    • 1970-01-01
    • 2018-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多