Сеттер через декоратор в ООП в Python
Для записи приватных свойств также делают
сеттер: второй метод с декоратором
name.setter, где name -
имя свойства для чтения. Давайте сделаем
сеттеры свойств:
class User:
def __init__(self):
self.__name = None
self.__surn = None
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
self.__name = name
@property
def surn(self):
return self.__surn
@surn.setter
def surn(self, surn):
self.__surn = surn
Давайте проверим работу свойств и сеттеров. Создадим объект нашего класса:
user = User()
Запишем значения свойств:
user.name = 'john'
user.surn = 'smit'
Прочитаем значения свойств:
print(user.name)
print(user.surn)
Может возникнуть вопрос, зачем нужны такие сложности, ведь фактически того же самого эффекта можно достичь, если сделать свойства публичными, а не приватными.
Дело в том, что свойства с сеттерами имеют преимущество: перед обращением к свойству можно выполнять некоторые проверки. К примеру, в нашем случае мы при записи имени и фамилии можем проверить, что новое значение не является пустой строкой:
class User:
def __init__(self):
self.__name = None
self.__surn = None
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
if len(name) > 0:
self.__name = name
else:
print('name is incorrect')
@property
def surn(self):
return self.__surn
@surn.setter
def surn(self, surn):
if len(surn) > 0:
self.__surn = surn
else:
print('surn is incorrect')
Давайте проверим, как это работает. Для начала создадим объект класса:
user = User()
Теперь попробуем записать корректное значение:
user.name = 'john'
А теперь попробуем записать некорректное:
user.name = '' # ошибка
Добавьте сеттеры свойств
в ваш класс Employee.
В классе Employee в сеттере
возраста сделайте проверку на то,
что возраст должен быть
от 0 до 120.
В классе Employee сделайте так,
чтобы при чтении зарплаты в конец ее
значения добавлялся знак доллара.