我想通过添加属性和类属性来动态地修改类。 确实必须是动态的,因为我正在构建一个符号执行引擎,因此 这些类是用户定义的,我无法修改代码。
例如,假设用户定义的类是下一个:
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或set都关联到data属性。
在引擎中,我有类似的东西,但是我找不到办法 设置属性:
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
注意事项:调用引擎集并获取时,必须将实例和属性名称作为参数传递。
有没有办法做到这一点?