Чем можно заменить @property

Python Middle Без компании
Чем можно заменить @property
Ответы
Для замены `@property` в Python можно использовать несколько подходов, в зависимости от ситуации: - **Геттеры/сеттеры (явные методы)** ``` class MyClass: def __init__(self): self._x = None def get_x(self): return self._x def set_x(self, value): self._x = value ``` - **`__getattr__` и `__setattr__`** Позволяют перехватывать доступ к атрибутам динамически: ``` class MyClass: def __getattr__(self, name): if name == 'x': return self._x raise AttributeError(name) ``` - **Дескрипторы (`__get__`, `__set__`)** Полезны для повторного использования логики: ``` class Descriptor: def __get__(self, obj, objtype=None): return obj._x def __set__(self, obj, value): obj._x = value class MyClass: x = Descriptor() ``` - **`functools.cached_property`** (Python 3.8+) Для ленивых вычислений с кэшированием: ``` from functools import cached_property class MyClass: @cached_property def x(self): return expensive_computation() ``` Выбор зависит от задачи: - Для простых случаев — `@property`. - Для динамических атрибутов — `__getattr__`. - Для повторяющейся логики — дескрипторы. - Для кэширования — `cached_property`.