«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Геттеры и сеттеры декораторов в Python

Геттеры и сеттеры декораторов в Python

Опубликовано 27 августа 2024 г.
Просматривать:961

Decorator Getters and Setters in Python

Одним типом декораторов являются методы получения и установки свойств. Эти декораторы обеспечивают контролируемый доступ к переменным в экземплярах классов.

Геттеры и установщики свойств разработаны специально для управления атрибутами в объектно-ориентированном программировании. Они отличаются от декораторов функций тем, что используются для атрибутов классов (см. мою публикацию о декораторах функций здесь).

Оба декоратора функций, а также декораторы получения и установки свойств изменяют код с помощью многоразового кода и используют синтаксис '@'. Они оба меняют функциональность кода.

Хорошо, давайте приступим.

Геттеры и установщики свойств применяются к методам внутри класса для определения различного поведения. сеттер устанавливает атрибут в значение, а геттер извлекает атрибут из класса. Атрибут устанавливается первым.

Давайте рассмотрим пример, а затем разберем его:

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

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/tessmueske/decorator-getters-and-setters-in-python-6cd?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3