Наследование приватных полей python

Рейтинг: 0Ответов: 0Опубликовано: 10.06.2023

У меня есть класс-родитель Time с приватными полями, с которыми в классе-потомке нужно вывести строку. Однако программа не работает - после введения значений появляется ошибка:

AttributeError: 'Train' object has no attribute '_Train__h'. Did you mean '_Train__num'?

Если посмотреть на экземпляр с помощью print(result.__dict__), то станет видно, что все поля родительского класса выглядят так: _Time__h, _Time__m, _Time__s, тогда как поле класса-наследника выглядят так: _Train__num. Я так поняла, что именно поэтому программа и не работает, так как считает, что поля времени принадлежат классу-родителю, а в классе-потомке их нет. Что именно я делаю не так?

# Родитель - Время (три числа): часы h, минуты m, секунды s
class Time:
    def __init__(self, h = 0, m = 0, s = 0):
        self.__h = h
        self.__m = m
        self.__s = s

    def __str__(self):
        return f"Time: {self.h:02}:{self.m:02}:{self.s:02}"
        
    def set_h(self, h):
        self.__h = h
    def set_m(self, m):
        self.__m = m
    def set_s(self, s):
        self.__s = s

    def get_h(self):
        return self.__h
    def get_m(self):
        return self.__m
    def get_s(self):
        return self.__s


# Потомок - Время отправления поезда - номер поезда num, время отправления (от родителя)
class Train(Time):
    def __init__(self, h = 0, m = 0, s = 0, num = 'No'):
        super().__init__(h, m, s)
        self.__num = num

    def __str__(self):
        return f"Time: {self.__h:02}:{self.__m:02}:{self.__s:02}\nTrain number: {self.__num}"
        
    def set_num(self, num):
        self.__num = num

    def get_num(self):
        return self.__num

result = Train()
h, m, s = map(int, (input('Enter hours: ', ), input('Enter minutes: ', ), input('Enter seconds: ', )))
num = input('Train number: ', )

print(result)

Ответы

Ответов пока нет.