python - 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()
解决方案
所有__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
给下一个。
推荐阅读
- vba - 从 Access VBA 在 SQL 中保存 jpg
- wordpress - 删除分页的最后一页
- sql - “SELECT TOP”查询的意外 SQL 行为
- python - 填充颜色不适用于我的函数(Python 乌龟图形)
- unix - Ocaml 客户端-服务器:客户端在尝试连接时返回 EAGAIN
- mysql - 更新 MySQL 中 2 个表之间的电子邮件匹配 - 黑名单
- javascript - NextJS - 导出被破坏(没有 CSS,没有 JS)
- c++ - 用于透视的倒置几何 gBuffer 位置。正字法好吗?
- python - 蟒蛇 | 制作列表的百分比
- bluetooth - 与 Arduino 的 GPS 通信