为了账号安全,请及时绑定邮箱和手机立即绑定

Init函数在python中的多重继承中执行

Init函数在python中的多重继承中执行

HUX布斯 2023-03-08 11:07:20
我是 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()
查看完整描述

1 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

所有__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给下一个参数。


查看完整回答
反对 回复 2023-03-08
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号