mumei2018 发表于 2024-1-29 20:41:06

小甲鱼构造函数 重新 钻石继承那一集 我跟着写 为什么没出现 小甲鱼说的问题呀

代码如下

class A:
    def __init__(self):
      print("我是A")

      
class B1(A):
    def __init__(self):
      print("我是B1")

      
class B2(A):
    def __init__(self):
      print("我是B2")

      
class C(B1, B2):
    def __init__(self):
      B1.__init__(self)
      B2.__init__(self)
      print("我是C")

      
c = C()
我是B1
我是B2
我是C

小甲鱼的结果是
我是A被调用了两次
而我这个 一次没都被调用 请问是什么问题呢?

FishC 发表于 2024-1-29 20:41:41

你的代码中,每一个子类的构造函数都没有调用父类的构造函数,所以父类A的构造函数没有被调用。可以修改为将每个子类的构造函数改为以下形式:

class B1(A):
    def __init__(self):
      super().__init__()
      print("我是B1")
      
class B2(A):
    def __init__(self):
      super().__init__()
      print("我是B2")

在每个子类的构造函数中使用super()函数来调用父类的构造函数。这样就会按照指定的继承顺序依次调用父类的构造函数。

另外,为了更好地理解构造函数的调用顺序,你可以在父类A的构造函数中加入一条打印语句,如下所示:

class A:
    def __init__(self):
      print("我是A的构造函数")

这样就可以查看到构造函数的调用顺序了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

mumei2018 发表于 2024-1-29 20:43:26

FishC 发表于 2024-1-29 20:41
你的代码中,每一个子类的构造函数都没有调用父类的构造函数,所以父类A的构造函数没有被调用。可以修改为 ...

对 我仔细看 发现小甲鱼在视频里 就是你这么写得 我抄代码抄错了

FishC 发表于 2024-1-29 20:43:44

mumei2018 发表于 2024-01-29 20:43
对 我仔细看 发现小甲鱼在视频里 就是你这么写得 我抄 ...

没关系,犯错是常有的事情。重要的是从错误中学习,并且及时纠正。在编程中,经常需要改动和调试代码,所以犯错误是正常的过程。记得多动手敲代码并且理解其中的原理,这样就能更好地掌握知识了。如果还有其他问题,随时都可以问我哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 小甲鱼构造函数 重新 钻石继承那一集 我跟着写 为什么没出现 小甲鱼说的问题呀