我正在尝试使用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或类似结果。
module
这是内置module
类型的实例。的property
类型依赖于协议的描述符和描述符的协议仅在类属性调用(可以设置一个property
(或任何其他描述符)作为实例属性,但随后的__get__
/ __set__
/__del__
方法将不被调用)。
如果要使用描述符进行代理,则必须将模块包装在代理类中,然后在类上设置属性。但是我不确定它是否可以按预期工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句