如何在没有实例的情况下引用父类的类变量

时间:2019-03-02 12:59:26

标签: python class inheritance

class A():
    a = [1, 2]

class B(A):
    a = super().a + [3]

给出错误:

 RuntimeError: super(): no arguments

我希望结果是

 class B(A):
     a = [1, 2, 3]

2 个答案:

答案 0 :(得分:1)

您可以使用A.a代替super。

,但是当您没有创建实例时就不能调用super。像这样:

class A():
    def __init__(self):        
        self.a = [1, 2]

class B(A):
    def __init__(self):
        super(B, self).__init__()
        self.a += [3]

然后在创建实例时:

i = B()

print(i.a)
>> [1, 2, 3]

答案 1 :(得分:0)

班级变量可以由您的班级以及同一时间班级实例访问。 因此,这里发生的是,当我们尝试访问实例上的属性时,它首先检查实例是否包含该属性;如果不是,它将检查父类或从其继承的任何类是否包含属性。

class A(): 
    a = [1, 2] 

class B(A): 
    a = A.a + [3]

测试

print(A.a)  # access class variable using the class
print(B.a)  # access class variable using the class inheritance as B inherit from A
ins = A()   # initializing instance of class A
print(ins.a)  # access class variable using instance of the class

输出

[1, 2]
[1, 2]
[1, 2]

如您所见,我们得到相同的输出。

相关问题