Как ссылаться на переменную класса родительского класса без экземпляра

#python #class #inheritance

#python #класс #наследование

Вопрос:

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

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

Выдает ошибку:

  RuntimeError: super(): no arguments
  

Я хочу, чтобы результат был

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

Комментарии:

1. Используйте A.a [3]

2. Основываясь на ваших комментариях к вопросам, вам необходимо уточнить свой вопрос.

Ответ №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. Я понимаю, что моя ситуация на самом деле другая. Я хочу B быть микшером, предоставляя [3] для .a любого класса. Кроме того, в моей ситуации — я вынужден иметь дело с переменными класса и не могу переопределить __init__ .

2. Позвольте мне проверить ваш случай.

3. Если B это смешивание, я думаю, вам следует добавлять B в другие классы, а не их в B . Правильно?

Ответ №2:

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

 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]
  

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

Комментарии:

1. Однако я хочу использовать ее как mixin, поэтому нет ссылки на A

2. я не уверен, что вы имеете в виду под mixin, извините.