半夜起床不睡觉 发表于 2020-4-3 16:37:09

菱形继承的问题,

class A():
    def __init__(self):
      print("进入A...")
      print("进入N...")
      print("离开A...")

class Q():
    def __init__(self):
      print("进入X...")
      print("进入AS...")
      print("离开AZ...")

class B(A,Q):
    def __init__(self):
      print("进入B...")
      super().__init__()
      print("离开B...")
      print("进入E...")


想请教一下各位大神,这里这个继承为什么没有继承Q呢

qiuyouzhi 发表于 2020-4-3 16:38:39

因为继承多个类时,super优先调用继承在前的父类
你可以打印下__mro__看看顺序

sunrise085 发表于 2020-4-3 16:42:11

看看这个帖子
我在这个帖子中回答的比较详细,
应该能解答你的疑惑

半夜起床不睡觉 发表于 2020-4-3 17:10:27

sunrise085 发表于 2020-4-3 16:42
看看这个帖子
我在这个帖子中回答的比较详细,
应该能解答你的疑惑

请问大佬,如果我要输出两个父类,是不是只能用A.__init__(self) Q.__init__(self)而不能用super呢

半夜起床不睡觉 发表于 2020-4-3 17:11:02

qiuyouzhi 发表于 2020-4-3 16:38
因为继承多个类时,super优先调用继承在前的父类
你可以打印下__mro__看看顺序

请问大佬,如果我要输出两个父类,是不是只能用A.__init__(self) Q.__init__(self)而不能用super呢

永恒的蓝色梦想 发表于 2020-4-3 17:20:51

半夜起床不睡觉 发表于 2020-4-3 17:10
请问大佬,如果我要输出两个父类,是不是只能用A.__init__(self) Q.__init__(self)而不能用super呢

输出两个父类是什么意思?

sunrise085 发表于 2020-4-3 17:24:11

半夜起床不睡觉 发表于 2020-4-3 17:11
请问大佬,如果我要输出两个父类,是不是只能用A.__init__(self) Q.__init__(self)而不能用super呢

这样指定去执行哪个是最方便的。

其实super还可以加参数的,在那个帖子中有比较详细的解释,我就不再敲一遍字了
那篇帖子有好几层楼都是具体的回答。
你可以看看我在那个帖子中3楼给出的例程

半夜起床不睡觉 发表于 2020-4-6 16:34:33

sunrise085 发表于 2020-4-3 17:24
这样指定去执行哪个是最方便的。

其实super还可以加参数的,在那个帖子中有比较详细的解释,我就不再 ...

好的,谢谢大佬
页: [1]
查看完整版本: 菱形继承的问题,