我正在尝试用python做恶魔,但它并没有像预期的那样工作:
def inject_imports(self,module):
m = sys.modules[module]
for key in self._classdict.keys():
setattr(m, key, property(lambda : getattr(self, key)))
for key in self._methoddict.keys():
setattr(m, key, property(lambda : getattr(self,key)))
我用lambda以这种错综复杂的方式注入它的原因是我正在模仿一个懒惰的导入。问题是在运行时,我收到消息:
AttributeError: 'property' object has no attribute 'attribute'
实际上,属性对象实际上并不提供对属性的直接访问,而是具有fget / fset /等等。我怎样才能解决这个问题?我基本上只需要一个代理,透明地将对自身的访问重定向到lambda的结果,或类似的东西。
答案 0 :(得分:0)
module
这是内置module
类型的实例。 property
类型依赖于protocol descriptor,协议描述符仅在类属性上调用(您可以将property
(或任何其他描述符)设置为实例属性,但随后它会&#39 ; s __get__
/ __set__
/ __del__
方法无法被调用。
如果你想要一个使用描述符的代理,你必须将模块包装在一个代理类中,而不是在类上设置你的属性......但是我不确定它是否会起作用如预期的那样。