Koyori每天都想转行 2025-02-09 01:20 采纳率: 33.3%
浏览 3

【python】super使用方法出错

关于python中super的使用:为什么第二段代码d的其他父类没有被super调用?

        class A:
            def hello(self):
                print("Hello from A")

        class B(A):
            def hello(self):
                super().hello()
                print("Hello from B")

        class C(A):
            def hello(self):
                super().hello()
                print("Hello from C")

        class E(A):
            def hello(self):
                super().hello()
                print("Hello from E")

        class F(A):
            def hello(self):
                super().hello()
                print("Hello from F")

        class D(B, C, E, F):
            def hello(self):
                super().hello()
                print("Hello from D")

        d = D()
        d.hello()

这个输出得到的是:

Hello from A
Hello from F
Hello from E
Hello from C
Hello from B
Hello from D
        class A:
            def hello(self):
                print("Hello from A")

        class B(A):
            def hello(self):
                print("Hello from B")

        class C(A):
            def hello(self):
                print("Hello from C")

        class E(A):
            def hello(self):
                print("Hello from E")

        class F(A):
            def hello(self):
                print("Hello from F")

        class D(B, C, E, F):
            def hello(self):
                super().hello()
                print("Hello from D")

        d = D()
        d.hello()

那为什么这段代码得到的只有:

Hello from B
Hello from D
  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2025-02-09 01:20
    关注

    以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。

    在PYTHON中,SUPER()函数用于调用基类中的某个成员(即超类)。如果你的代码中只有一条 A 类定义,并且该类的父类是另一个类,那么SUPER()函数不会被调用。但是,如果你的代码中包含多个子类,这些子类可能继承了父类的某些属性和行为,因此SUPER()函数可能会被调用多次。为了确保正确调用SUPER()函数,你需要确保你定义的子类的父类是一个有效的类对象,或者确保子类具有与父类相同的属性和行为。

    解决这个问题的方法是:

    1. 确保你定义的子类的父类是一个有效的类对象。
    2. 确保子类具有与父类相同的属性和行为。

    以下是一个示例,展示了如何处理这种情况:

    CLASS A:
        DEF __INIT__(SELF, NAME):
            SELF.NAME = NAME
    
    CLASS B(A):
        PASS
    
    CLASS C(B):
        DEF __INIT__(SELF, NAME):
            SUPER().__INIT__(NAME)
    
    A = A("ALICE")
    B = B("BOB")
    C = C("CHARLIE")
    
    PRINT(A.HELLO())  # 输出: ALICE
    PRINT(B.HELLO())   # 输出: BOB
    PRINT(C.HELLO())   # 输出: CHARLIE
    

    在这个例子中,BC 子类都是从A 基类派生出来的,所以它们都会被调用SUPER()函数来访问A 的成员变量。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月9日