首页 > 解决方案 > python中多重继承中的init函数执行

问题描述

我是 python 新手,试图理解 python 中的继承。Python具有多重继承的特性。一个类可以同时继承多个类。当我们创建子类的对象时,会调用子类的init函数。我想调用两个子类的父类的init函数,但我只能调用一个init函数。我阅读了方法解析顺序的概念,将调用最左边的类继承的init函数。请更正我的代码,以便调用两个父类的 init 函数。

class A:
    def __init__(self):
        print("in A Init")
    

class B:
    def __init__(self):
        print("in B Init")

    


class C(B,A):
    def __init__(self):
        super().__init__()
        print("in C Init")

cObj= C()

标签: pythonoop

解决方案


所有__init__函数都需要调用super().__init__(),如下所示:

class A:
    def __init__(self):
        super().__init__()
        print("in A Init")

class B:
    def __init__(self):
        super().__init__()
        print("in B Init")

class C(B, A):
    def __init__(self):
        super().__init__()
        print("in C Init")

c_obj= C()

当你调用它时,你会得到以下输出:

in A Init
in B Init
in C Init

根据super()函数文档,它返回对类的“父级或兄弟级”的引用,以方法解析顺序中的下一个为准。在层次结构的顶部,它返回对隐式父类的引用,它有一个什么都不做object的空方法。__init__

为了使其正常工作,最好所有继承的__init__函数都具有相同的签名,包括公共基类;在这种情况下,签名只是__init__(self)(没有附加参数),公共基类是object,它也__init__(self)没有附加参数,所以这一切都很好。另一种常见的模式是让他们都接受关键字参数并传递**kwargs给下一个。


推荐阅读