Наследование конструктора, переназначение метода
class human:
def __init__(self, name = '', age = 0):
self.__age = age
self.__name = name
def set_name(self):
name = str(input("Name: "))
self.__name = name
def set_age(self):
age = int(input("-> "))
if age >= 1 and age <= 100:
self.__age = age
else:
raise ValueError("Недопустимый возраст")
def get_age(self):
return self.__age
def get_name(self):
return self.__name
class teacher(human):
def __init__(self, spec = ''):
self.__specification = spec
super().__init__(name = '', age = 0)
def set_spec(self):
spec = str(input('-> '))
self.__specification = spec
def set_age(self):
age = int(input("age: "))
if age >= 1 and age <= 100:
self.__age = age
else:
raise ValueError("Недопустимый возраст")
def get_spec(self):
return self.__specification
if __name__ == "__main__":
test = teacher()
test.set_name()
test.set_age()
test.set_spec()
print(test.get_name(), test.get_age(), test.get_spec())
Класс учитель наследует human с его конструктором и так-же я захотел переназначить метод set_age, но проблема в том что при переназначения метода поле self.__age устанавливает значение по умолчанию, а не то которое я ввёл, в чем моя ошибка?
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
Это происходит потому что вы используете так называемые приватные переменные (хоть на самом деле в python они таковыми не являются).
Для имен переменных, которые учавствуют в наследовании (сетеры и гетеры, которых вы хотите переопределить), в качестве метки приватности следует использовать _ в начале имени, а не __.
То есть _age, _specification, _name.
Либо же придется каждый метод get_.. переписывать ручками.
