Существует ли аналог 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