Вызов переопределенного метода в ООП в Python
При переопределении потомок теряет
доступ к переопределенному методу
родителя. Однако, получить к нему
доступ все равно можно. Это делается
с помощью функции super,
которая указывает на родительский
класс.
Давайте посмотрим на примере, когда нам может понадобится доступ к родительскому методу. Пусть у нас есть следующий класс-родитель:
class User:
def __init__(self):
self.__name = None
def set_name(self, name):
self.__name = name
def get_name(self):
return self.__name
Пусть мы в классе-потомке переопределили метод родителя:
class Student(User):
def set_name(self, name):
if len(name) > 0:
self.__name = name
else:
print('student name error')
Можно заметить, что в переопределенном методе при выполнения условия фактически выполняется код родительского метода. Получается не нужное дублирование кода.
Можно от него избавиться, если вызвать метод родителя. Давайте сделаем это:
class Student(User):
def set_name(self, name):
if len(name) > 0:
super().set_name(name) # метод родителя
else:
print('student name error')
Дан следующий код:
class User:
def __init__(self):
self.__age = None
def set_age(self, age):
if age >= 0:
self.__age = age
else:
print('need age more 0')
class Employee(User):
def set_age(self, age):
if age <= 120:
if age >= 0:
self.__age = age
else:
print('need age more 0')
else:
print('need age less 120')
В классе Employee исправьте
упростите сеттер возраста, использовав
оригинальный метод родителя.