我有一个生成类的类工厂F。它不需要任何参数,只需要一个名称。我希望能够包装此方法并像这样使用它:
from myproject.myfactory.virtualmodule import Foo
“myfactory”在项目中是一个真正的模块,但我希望virtualmodule是一个假装是模块的东西。你知道吗
每当我从virtualmodule导入一些东西时,我都希望它使用我的factory方法构建一个新类,并使它看起来像是导入的一样。你知道吗
这能做到吗?是否有一种模式允许我将类工厂包装为一个模块?你知道吗
谢谢!你知道吗
---
为什么我需要这个?它实际上是测试一个将在网格上运行的进程,该网格要求所有类都是可导入的。你知道吗
自动生成的类的实例将在我的PC上序列化,然后在每个网格节点上取消序列化。如果无法在网格节点上导入类,则取消序列化将失败。你知道吗
如果我劫持导入机制作为生成测试类的接口,那么我肯定地知道,我可以在PC上导入的任何东西都可以在网格上完全相同地重新创建。那将满足我考试的要求。你知道吗
可以将任意对象填充到
sys.modules
结构中:Python导入机制将使用属性访问来查找对象,从而触发
__getattr__
实例上的VirtualModule
方法。你知道吗在
myproject/__init__.py
或myproject/myfactory/__init__.py
文件中这样做,您就可以开始了。myproject.myfactory
包确实需要存在,导入机器才能找到myproject.myfactory.virtualmodule
对象。你知道吗相关问题 更多 >
编程相关推荐