Задачи на ООП в Python. Часть 5
Дан следующий класс-родитель:
class User:
def __init__(self, name):
self.__name = name
def getName(self):
return self.__name
def setName(self, name):
self.__name = name
Сделайте класс Employee, наследующий
от User. Переопределите __init__:
добавьте параметры age и salary.
Имя передайте в родителя через super().
Сделайте геттеры getAge и getSalary
для новых свойств.
Создайте объект Employee и выведите
имя, возраст и зарплату через геттеры.
Дан следующий код:
class User:
def __init__(self):
self.__age = None
def setAge(self, age):
if age >= 0:
self.__age = age
else:
print('need age more 0')
class Employee(User):
def setAge(self, age):
if age <= 120:
if age >= 0:
self.__age = age
else:
print('need age more 0')
else:
print('need age less 120')
Упростите сеттер возраста в Employee,
вызвав оригинальный метод родителя через
super().
Дан следующий код:
class User:
def __init__(self):
self.__name = None
self.__surn = None
def setName(self, name):
self.__name = name
def getName(self):
return self.__name
def setSurn(self, surn):
self.__surn = surn
def getSurn(self):
return self.__surn
class Employee(User):
def getFull(self):
return self.name + ' ' + self.surn
Убедитесь, что метод getFull приводит
к ошибке. Объясните почему.
Исправьте getFull, используя геттеры
родителя.
Дан следующий код:
class User:
def __init__(self):
self.__name = None
def setName(self, name):
self.__name = name
def getName(self):
return self.__name
class Employee(User):
def setName(self, name):
if len(name) > 0:
self.__name = name # ошибка
Исправьте проблемы в коде потомка: не
обращайтесь к приватному свойству родителя
напрямую, а вызывайте super().setName.
В классе User сделайте приватный метод
__capFirst, который делает первый
символ строки заглавным. Используйте его
в setName.
Попробуйте вызвать приватный метод родителя
из класса Employee. Что произойдет?
Перепишите свойство имени через защищенное
_name (одно подчеркивание) и покажите,
что потомок может с ним работать напрямую.