AttributeError: 'super' object has no attribute 'x'

Инженеров

Новичок
Пользователь
Фев 29, 2024
1
0
1
ОС: Windows 10, Python 3.11, модули не использую

Здравствуйте! Проблема с атрибутом myAttr. Он вроде как есть, но его в то же время нет. Хочу понять, как это возможно.

Python:
class BaseClass:
    def __init__(self):
        self.myAttr = 2

class MyClass(BaseClass):
    def __init__(self):
        b = super()
        b.__init__()
        print('myAttr' in dir(b))  # True
        print(getattr(b, 'myAttr'))  # AttributeError

MyClass()
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 583
457
83
не правильно вызываете конструктор родительского класса
super() возвращает не базовый класс, а объект-посредник, делегирующий вызовы методов базовому классу
если вы вызовите print(type(b)), то вам вернет <class 'super'>
поэтому в вашем примере в переменой b находиться объект-посредник, у которого есть параметр, но получить он его не может
если заменить b на self, то все отработает

вот так правильно наследоваться
Python:
class BaseClass:
    def __init__(self):
        self.myAttr = 2


class MyClass(BaseClass):
    def __init__(self):
        super().__init__()
        print('myAttr' in dir(self))  # True
        print(getattr(self, 'myAttr'))  # 2


MyClass()
 
  • Мне нравится
Реакции: 4olshoy_blen

Форум IT Специалистов