Как ссылаться на переменную класса родительского класса без экземпляра - PullRequest
0 голосов
/ 02 марта 2019
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 голосов
/ 02 марта 2019

переменные класса могут быть доступны для ваших class и в то же время экземпляров класса. Так что здесь происходит, когда мы пытаемся получить доступ к атрибуту в экземпляресначала проверяется, содержит ли экземпляр атрибут;если это не так, он проверяет, содержит ли родительский класс или какой-либо другой класс, который он наследует, атрибуты.

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

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

test :

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

output :

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

Как видите, мы получаем тот же вывод.

0 голосов
/ 02 марта 2019

Вы можете использовать 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...