Python: уроки, справочник и задачи

Property python

Раздел: ООП в Python · Обновлено 31.10.2026

Декоратор Property python представляет собой особый тип декоратора, который позволяет определять методы, которые могут быть доступны как атрибуты, обеспечивая контроль над чтением, записью и удалением свойств объектов. В данной статье мы рассмотрим, что такое декоратор @property, его создание, примеры использования и преимущества, которые он предоставляет.

Property python
Фото: Jidanni / CC0, Wikimedia Commons
Содержание статьи
  1. 1. Что такое декоратор @property ?
  2. 2. Создание декоратора @property
  3. 3. Примеры использования
  4. 4. Преимущества декоратора @property
  5. 5. Геттеры, сеттеры и дилетеры
  6. 6. Использование в наследовании
  7. 7. Сравнение с обычными методами
  8. 8. Вычисляемые свойства
  9. 9. Кэширование результатов

1. Что такое декоратор @property ?

2. Создание декоратора @property

Пример создания декоратора @property:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    @property
    def radius(self):
        return self._radius
    @radius.setter
    def radius(self, value):
        if value < 0:
            raise ValueError("Радиус не может быть отрицательным")
        else:
            self._radius = value

3. Примеры использования

Пример использования декоратора @property:

circle = Circle(5)
print(circle.radius)  # Выводит 5
circle.radius = 7  # Устанавливает новый радиус
print(circle.radius)  # Выводит 7

4. Преимущества декоратора @property

Декоратор @property представляет собой мощный инструмент для обеспечения контроля над доступом к свойствам объектов в Python. Его использование способствует созданию более надежного, модульного и расширяемого кода, обеспечивая защиту данных и возможность добавления дополнительной логики при работе со свойствами. Понимание и использование декоратора @property поможет вам писать более гибкий и поддерживаемый код ваших классов в Python.

5. Геттеры, сеттеры и дилетеры

Пример использования геттера, сеттера и дилетера:

class Temperature:
    def __init__(self, celsius):
        self._celsius = celsius
    @property
    def celsius(self):
        return self._celsius
    @celsius.setter
    def celsius(self, value):
        if value < -273.15:
            raise ValueError("Температура не может быть ниже абсолютного нуля")
        else:
            self._celsius = value
    @celsius.deleter
    def celsius(self):
        del self._celsius

6. Использование в наследовании

Пример использования декоратора @property в наследовании:

class Square(Rectangle):
    def __init__(self, side_length):
        super().__init__(side_length, side_length)
    @property
    def area(self):
        return self.width * self.height

7. Сравнение с обычными методами

Декоратор @property представляет мощный инструмент для обеспечения контроля доступа к данным объекта в Python. Его применение улучшает читаемость кода, обеспечивает возможность добавления дополнительной логики при доступе к свойствам и способствует созданию более модульного и расширяемого кода. Владение этим механизмом является важным навыком для любого опытного Python-разработчика.

8. Вычисляемые свойства

Пример вычисляемого свойства с использованием декоратора @property:

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height
    @property
    def area(self):
        return self.width * self.height
# Создание объекта прямоугольника
rectangle = Rectangle(5, 10)
print(rectangle.area)  # Выводит 50 (площадь прямоугольника)

9. Кэширование результатов

Пример кэширования результатов с использованием декоратора @property:

class Computation:
    def __init__(self):
        self._result = None
    @property
    def result(self):
        if self._result is None:
            self._result = self.perform_computation()
        return self._result
    def perform_computation(self):
        # Выполнение сложных вычислений
        return 42
# Создание объекта для выполнения вычислений
computation = Computation()
print(computation.result)  # Выполняет вычисления и выводит результат
print(computation.result)  # Использует закэшированный результат без повторных вычислений
Декоратор @property представляет мощный инструмент для создания вычисляемых свойств, кэширования результатов и управления доступом к данным объекта в Python. Его использование способствует улучшению производительности, гибкости и читаемости кода, делая ваш код более эффективным и модульным. Понимание и корректное применение декоратора @property поможет вам создавать более гибкие и мощные классы ваших приложений на Python.