Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pyOpPdSt 14 of 174 menu
◀ ▶

Сеттер через декоратор в ООП в 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 сделайте так, чтобы при чтении зарплаты в конец ее значения добавлялся знак доллара.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить