@maltsevdm

Существует ли аналог Proxy и Reflect (как в JS) для Python?

Мне нужен механизм в Python, который будет выполнять такую же функцию, как Proxy в JS.
  • Вопрос задан
  • 84 просмотра
Решения вопроса 2
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Существует ли аналог Proxy и Reflect (как в JS) для Python?

Встроенных аналогов нет, но можно реализовать самому.

Аналог Proxy:
class Proxy:
    def __init__(self, target):
        self.target = target

    def __getattr__(self, name):
        print(f"Пытаемся получить атрибут {name}")
        if isinstance(self.target, dict):
            return self.target.get(name, None)
        return getattr(self.target, name, None)

    def __setattr__(self, name, value):
        if name == 'target':
            super().__setattr__(name, value)
        else:
            print(f"Устанавливаем значение {value} для атрибута {name}")
            if isinstance(self.target, dict):
                self.target[name] = value
            else:
                setattr(self.target, name, value)

obj = Proxy({'x': 1})
print(obj.x)
obj.x = 2

Как функция:
class Proxy:
    def __call__(self, *args, **kwargs):
        print("Объект вызван как функция")

p = Proxy()
p()

Аналог Reflect:
obj = {'x': 1}
print(getattr(obj, 'x', None))
setattr(obj, 'x', 2)

Управлять классами в момент создания:
class Meta(type):
    def __new__(cls, name, bases, dct):
        print(f"Создается класс {name}")
        return super().__new__(cls, name, bases, dct)

class MyClass(metaclass=Meta):
    pass
Ответ написан
fenrir1121
@fenrir1121
Начни с документации
@property переопределяет доступ к атрибутам и логику чтения, записи и удаления.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы