Одним типом декораторов являются методы получения и установки свойств. Эти декораторы обеспечивают контролируемый доступ к переменным в экземплярах классов.
Геттеры и установщики свойств разработаны специально для управления атрибутами в объектно-ориентированном программировании. Они отличаются от декораторов функций тем, что используются для атрибутов классов (см. мою публикацию о декораторах функций здесь).
Оба декоратора функций, а также декораторы получения и установки свойств изменяют код с помощью многоразового кода и используют синтаксис '@'. Они оба меняют функциональность кода.
Хорошо, давайте приступим.
Геттеры и установщики свойств применяются к методам внутри класса для определения различного поведения. сеттер устанавливает атрибут в значение, а геттер извлекает атрибут из класса. Атрибут устанавливается первым.
Давайте рассмотрим пример, а затем разберем его:
class Shoe: def __init__(self, brand = "Adidas", size = 9): self.brand = brand self.size = size self._condition = "New" @property def size(self): """The size property""" return self._size @size.setter def size(self, size): """size must be an integer""" if isinstance(size, int): self._size = size else: print("size must be an integer") def cobble(self): """Repairs the shoe and sets the condition to 'New'.""" self.condition = "New" print("Your shoe is as good as new!") @property def condition(self): """The condition property""" return self._condition @condition.setter def condition(self, condition): self._condition = condition
Давайте рассмотрим часть этого кода:
Подчеркивания перед некоторыми атрибутами (состояние, размер) указывают разработчику, что они являются частными; они специфичны для каждого экземпляра класса Shoe (каждая обувь, строчные буквы).
Вы могли заметить, что состояние и размер создаются по-разному. self._condition = «Новый» означает, что каждый экземпляр (или объект) класса обуви создается с условием «Новый». То же самое делается и для атрибута размера, но он не записывается как self._size = 9, чтобы вызвать проверку свойства установщика, поскольку размер должен быть целым числом (этот процесс называется проверкой). Мы устанавливаем состояние каждого отдельного объекта обуви напрямую, вместо того, чтобы запускать его через методы установки и получения свойств.
Метод cobble не нуждается в декораторе, поскольку он просто выполняет действие, а не получает/устанавливает атрибут каждого объекта обуви.
Давайте внесем последнее изменение в наш код. Например, что, если мы хотим гарантировать, что атрибут размера нельзя будет изменить позже? В конце концов, обувь на самом деле не меняет свой размер, не так ли?
Мы можем использовать функцию hasattr() для проверки каждого объекта обуви. Имеет ли он частный атрибут размера, обозначаемый наличием «_size»? Если да, то это невозможно изменить. Вот реализованный код:
@size.setter def size(self, size): """size must be an integer and can't be changed once set""" if hasattr(self, '_size'): raise AttributeError("Can't change size once set") if isinstance(size, int): self._size = size else: raise ValueError("size must be an integer")
Установщики и геттеры свойств немного сложны для понимания, но как только вы их поймете, вы будете программировать на Python как профессионал!
Источники:
Школьные материалы Flatiron
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3