gpt4 book ai didi

python - 调用构造函数时在python中解析多级和多级继承的方法顺序

转载 作者:行者123 更新时间:2023-12-03 17:32:12 26 4
gpt4 key购买 nike

备注:

  • 在打印 D 类的 MRO 时获得正确的继承顺序,但没有获得 C 类的构造函数调用。

  • 问题:为什么不打印 C 构造函数 一个构造函数在下面给定的代码中?:
    class A(object):

    def __init__(self):
    print("A Constructor")

    class B(A):
    def __init__(self):
    print("B Constructor")
    super(B, self).__init__()

    class C():
    def __init__(self):
    print("C Constructor")
    super().__init__()

    def method(self):
    print("C method")


    class D(B, C):
    def __init__(self):
    print("D Constructor")
    super(D, self).__init__()
    super().method()
    d = D()
    print(D.__mro__)

    输出:
    enter image description here

    最佳答案

    1 初始化 C 从未被称为 cos

    2 super 开始在 D 上搜索,D->B->A-> 并在 -> 对象上结束

    3 在这种情况下,搜索开始 D->B->A->object,第一个 super 完成。

    object-or-type 确定要搜索的方法解析顺序。搜索从类型之后的类开始。

    先生 object-or-type 是 D -> B -> C -> A -> object 并且 type 的值为 B,然后 super() 搜索 C -> A -> object

    4 然后第二个 super() 使您可以从继承它的子类访问父类(super class)中的方法。

    5 在这种情况下,您可以访问 C.method 并在打印第一个 super 的构造函数后打印 oue "C method"。

    super() 单独返回父类(super class)的临时对象,然后允许您调用该父类(super class)的方法
    允许您以最少的代码更改换出父类(super class)。

    关于python - 调用构造函数时在python中解析多级和多级继承的方法顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51738309/

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