@mrdrkot

Как корректно произвести множественное наследование в Python 3?

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

class A:
    def __init__(self):
        self.aa = 2

class B:
    def __init__(self):
        self.ab = 3
   
class C(A, B):
    pass
    
c = C()
print(c.aa, c.ab)


Пишет:

print(c.aa, c.ab)
AttributeError: 'C' object has no attribute 'ab'
  • Вопрос задан
  • 272 просмотра
Решения вопроса 1
ScriptKiddo
@ScriptKiddo
https://stackoverflow.com/a/58337004

class A:
    def __init__(self):
        super().__init__()
        self.aa = 2


class B:
    def __init__(self):
        super().__init__()
        self.ab = 3


class C(A, B):
    pass


c = C()
print(c.aa, c.ab)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ScriptKiddo, а сможете объяснить почему именно так? Почему обязательно должен быть вызов super() в A.__init__?
Я например ожидал другой логики (см. спойлер), но она не работает. А работает так как вы написали.
По тем объяснениям что по вашей ссылке и что я сам нашел - объясняется как работает MRO и super(), но про такую ситуацию - в лучшем случае 'надо вот так'. А хочется понять почему именно так :)
spoiler
# Не работает
class A:
    def __init__(self):
        self.aa = 2

class B:
    def __init__(self):
        self.ab = 3

class C(A, B):
    def __init__(self):
        super().__init__()


c = C()
print(c.aa, c.ab)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы