#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, извините.