Встречается на собеседованиях • сегодня

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

Для замены @property в Python можно использовать несколько подходов, в зависимости от ситуации:

  1. Геттеры/сеттеры (явные методы)

    python
    class MyClass:
        def __init__(self):
            self._x = None
        
        def get_x(self):
            return self._x
        
        def set_x(self, value):
            self._x = value
  2. __getattr__ и __setattr__
    Позволяют перехватывать доступ к атрибутам динамически:

    python
    class MyClass:
        def __getattr__(self, name):
            if name == 'x':
                return self._x
            raise AttributeError(name)
  1. Дескрипторы (__get__, __set__)
    Полезны для повторного использования логики:

    python
    class Descriptor:
        def __get__(self, obj, objtype=None):
            return obj._x
        def __set__(self, obj, value):
            obj._x = value
    
    class MyClass:
        x = Descriptor()
  2. functools.cached_property (Python 3.8+)
    Для ленивых вычислений с кэшированием:

    python
    from functools import cached_property
    class MyClass:
        @cached_property
        def x(self):
            return expensive_computation()

Выбор зависит от задачи:

  • Для простых случаев — @property.
  • Для динамических атрибутов — __getattr__.
  • Для повторяющейся логики — дескрипторы.
  • Для кэширования — cached_property.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы