Я хочу динамически изменить класс, добавив свойство и атрибут класса. Это должно быть динамично, потому что я создаю механизм исполнения symboli c, чтобы классы определялись пользователем, и я не могу изменить код.
Например, предположим, что класс, определенный пользователем это следующее:
class X:
def __init__(self, data):
self.data = data
То, что я точно хочу достичь, это, но динамически:
class X:
_engine = None
def __init__(self, data):
self.data = data
@property
def data(self):
return self._engine.my_get_method(self, "data")
@data.setter
def data(self, value):
return self._engine.my_set_method(self, "data", value)
Поэтому я перехватываю каждый get или устанавливаю атрибут данных.
В движке у меня есть что-то вроде этого, но я не могу найти способ установить свойство:
class Engine:
def my_get_method(self, attr_name):
...
def my_set_method(self, attr_name, value):
...
def modify_dinamically(self, the_class):
for attr_name in class_attr_names:
setattr(the_class, "_engine", self)
setattr(the_class, attr_name, property(...)) # set the property in some way
Что нужно учесть: Когда я вызываю набор двигателя и получаю, я должен пройти экземпляр и имя атрибута в качестве параметров.
Есть ли способ сделать это?