При запуске программы не отображаются все свойства экземпляра класса

Всем привет! Подскажите, пожалуйста, как сделать так, чтобы отображались при команде print все свойства экземпляра pt? Я просто не совсем понимаю, ведь все свойства класса PersonalComputers наследуются экземпляром класса pt или нет? Команда pt.__dict__ отображает их все, но на печати только два из дочернего класса Table.

Заранее огромное спасибо!

class PersonalComputers:
    def __init__(self, ram: int = 32, hdd: int = 1024, model: str = 'Pentium', cpu: int = 3):
        self._ram = ram
        self._hdd = hdd
        self._model = model
        self._cpu = cpu

class Table(PersonalComputers):
    def __init__(self, keyboard, mouse, display):
        self.__keyboard = keyboard
        self.__mouse = mouse
        self.__display = display
        super(Table, self).__init__(keyboard, mouse, display)

    def __str__(self):
        return f'{self.__keyboard},{self.__mouse},{self.__display}'


class LapTops(PersonalComputers):
    def __init__(self, diagonal, size):
        self.__diagonal = diagonal
        self.__size = size
        super(LapTops, self).__init__(diagonal, size)
    def __str__(self):
        return f'{self.__diagonal},{self.__size}'


pt = LapTops(10, 15)
print(pt)  # 10,15

Ответы (1 шт):

Автор решения: S. Nick

Класс Table вообще никак не задействован.

Класс LapTops наследуется от PersonalComputers и при инициализации вы наследуете все его атрибуты.

При этом вы передаете в класс PersonalComputers два параметра, которые принимаются аргументами ram и hdd и меняют свои значения.

Чтобы отображались все атрибуты класса LapTops, в т.ч. и наследованные - добавьте их в return метода __str__

class PersonalComputers:
    def __init__(self, ram: int = 32, hdd: int = 1024, model: str = 'Pentium', cpu: int = 3):
        self._ram = ram
        self._hdd = hdd
        self._model = model
        self._cpu = cpu
        print(f'\nclass PersonalComputers: {ram}, {hdd}, {model}, {cpu}\n')

class Table(PersonalComputers):
    def __init__(self, keyboard, mouse, display):
        self.__keyboard = keyboard
        self.__mouse = mouse
        self.__display = display
        super(Table, self).__init__(keyboard, mouse, display)

    def __str__(self):
        return f'\n ???? Table: {self.__keyboard}, {self.__mouse},{self.__display}'


class LapTops(PersonalComputers):
    def __init__(self, diagonal, size):
        self.__diagonal = diagonal
        self.__size = size
        super(LapTops, self).__init__(diagonal, size)
        
    def __str__(self):
        return f'LapTops: {self.__diagonal}, {self.__size}\n' \
               f'\tram: {self._ram}, hdd: {self._hdd}, model: {self._model}, cpu: {self._cpu}'


pt = LapTops(10, 15)
print(pt)  
→ Ссылка