我有一个类Item
,它声明我可以在我的程序中使用各种项目。在整个源代码中,这个类在很多场合都被实例化,每个实例都为我提供了某些功能。这些实例也存储在全局字典中,以便于按名称检索
itm = get_item("name")
然而,每个程序通常使用大量这些项,导致大量这些声明性行。另外,这些项目的性质是声明性的而不是实例化的,所以我想出了一个更好,更正确的方式来注册"这些项目只是简单地导入它们:
from item_storage import name1, name2, name3
暂时忘记我为什么要这样做(让我们只提一下这些项目实际上是可以动态扩展,覆盖等等的类声明。)
我如何欺骗Python(2.7)允许我声明这个包含所有项目定义的item_storage
模块,并且仍然足以让导入机制起作用?
答案 0 :(得分:0)
我不确定我是否理解。但是你可以动态地动态创建导入行,然后使用exec来运行它。
exec "from item_storage import " + ", ".join(modules)
答案 1 :(得分:0)
我有一个我并不特别喜欢的解决方案:我已经使用sys.meta_path
声明了自定义导入处理程序,所以现在import item_storage
可以在我导入相关文件时随时随地工作第一次。
但是我希望一种技术更少侵入(为每次导入调用处理程序)。