gpt4 book ai didi

Python方法解析顺序

转载 作者:行者123 更新时间:2023-12-03 20:24:03 25 4
gpt4 key购买 nike

有人可以解释给定代码的输出以及在这种情况下 python MRO 是如何工作的吗?

class A(object):
def go(self):
print("go A go!")


class B(A):
def go(self):
super(B, self).go()
print("go B go!")


class C(A):
def go(self):
super(C, self).go()
print("go C go!")


class D(C, B):
def go(self):
super(D, self).go()
print("go D go!")


d = D()
d.go()

输出:
go A go!
go B go!
go C go!
go D go!
按照从左到右和深度,我会说它应该是:
go A go!
go C go!
go D go!
但似乎它不像我想的那样工作。

最佳答案

一个类(class)的 MRO 基于它的 parent 的 MRO:

>>> A.__mro__
(<class '__main__.A'>, <class 'object'>)
>>> B.__mro__
(<class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
>>> C.__mro__
(<class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
>>> D.__mro__
(<class '__main__.D'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
three rules是:
  • child 走在 parent 之前:
  • A < 对象
  • B < A
  • C < A
  • D < C
  • D < B
  • parent 按基数排序:
  • C < B
  • 父 mros 被合并,保留它们的顺序。
  • 合并 B < A < objectC < A < object

  • 在 Python 2 的早期,搜索规则曾经是深度优先左或右,但随着对 C3 线性化算法的研究而改变。
    Super Considered Super有关在实际代码中利用此算法的方法的博客文章。

    关于Python方法解析顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64957587/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com