Python:多重继承:为什么super的超类的实例变量不可访问?

时间:2018-01-28 05:24:57

标签: python inheritance multiple-inheritance instance-variables superclass

这是我尝试执行的代码,Line 1原来是super().super().__init__(),但是没有效果(发出错误)。

class A:
    def __init__(self):
        self.var1=5

class B(A):
    def __init__(self):
        self.var2=10

class C(B):
    def __init__(self):
        self.var3=20
        super().__init__() ## Line 1

c=C()
print(c.var1)

编辑 - 当我尝试使用B类对象打印A类变量时,它可以正常工作

class A:
    def __init__(self):
        self.var1=5

class B(A):
    def __init__(self):
        self.var2=10
        super().__init__()

b=B()
print(b.var1)

我的问题是为什么c.var1没有给出正确的输出? (在这两种情况下,super().__init__()super().super().__init__()以及如何访问它?

1 个答案:

答案 0 :(得分:4)

这是一个对你有点帮助的小测试;

class A:
    def __init__(self):
        self.var1 = 5
        print("In A")

class B(A):
    def __init__(self):
        self.var2 = 10
        print("In B")

class C(B):
    def __init__(self):
        self.var3 = 20
        print("In C")
        super().__init__() ## Line 1

c = C()

将打印;

In C
In B

但是如果你把B中的一个调用添加到A的构造函数中;

class A:
    def __init__(self):
        self.var1 = 5
        print("In A")

class B(A):
    def __init__(self):
        self.var2 = 10
        print("In B")
        super().__init__()

class C(B):
    def __init__(self):
        self.var3 = 20
        print("In C")
        super().__init__() ## Line 1

c = C()

你得到了你期望的东西;

In C
In B
In A

这......

print(c.var1)
5
相关问题