Наследование приватных полей python
У меня есть класс-родитель 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)
Источник: Stack Overflow на русском