Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70% Забронировать скидку
07 Июл 2023
2 мин
1741

Использование @property вместо геттеров и сеттеров в Python

Часто при разработке программ на Python возникает необходимость контролировать доступ к атрибутам класса. В качестве примера можно привести ситуацию

Часто при разработке программ на Python возникает необходимость контролировать доступ к атрибутам класса.

В качестве примера можно привести ситуацию с классом Person, у которого есть атрибут age. В реальной жизни возраст не может быть отрицательным числом, поэтому при попытке присвоить атрибуту age отрицательное значение, программа должна выдать ошибку.

В Python существуют два основных способа контролировать доступ к атрибутам класса:

  1. Использование методов-геттеров и сеттеров
  2. Использование декоратора @property

Методы-геттеры и сеттеры

Методы-геттеры и сеттеры — это специальные методы, которые используются для управления доступом к атрибутам класса. Геттер используется для получения значения атрибута, а сеттер — для его изменения.

Возьмем наш пример с классом Person и реализуем геттер и сеттер для атрибута age:

class Person:
    def __init__(self):
        self._age = 0

    def get_age(self):
        return self._age

    def set_age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

В этом случае, чтобы получить возраст, необходимо вызвать метод get_age(), а чтобы изменить его — set_age().

Декоратор @property

Декоратор @property в Python позволяет упростить работу с геттерами и сеттерами, сделав их использование более наглядным и удобным.

Реализуем тот же функционал с помощью декоратора @property:

class Person:
    def __init__(self):
        self._age = 0

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

Теперь для получения возраста достаточно обратиться к атрибуту age как к обычной переменной, а не вызывать метод get_age(). Аналогично и с изменением возраста: вместо вызова метода set_age() можно просто присвоить новое значение атрибуту age.

Вывод

Использование декоратора @property вместо методов-геттеров и сеттеров делает код более читабельным и понятным. Это особенно заметно, когда атрибутов много и каждый из них требует контроля доступа.

Добавить комментарий

Подарок
Забрать подарок