Python导入动态生成的声明

时间:2014-05-23 11:35:30

标签: python

我有一个类Item,它声明我可以在我的程序中使用各种项目。在整个源代码中,这个类在很多场合都被实例化,每个实例都为我提供了某些功能。这些实例也存储在全局字典中,以便于按名称检索

itm = get_item("name")

然而,每个程序通常使用大量这些项,导致大量这些声明性行。另外,这些项目的性质是声明性的而不是实例化的,所以我想出了一个更好,更正确的方式来注册"这些项目只是简单地导入它们:

from item_storage import name1, name2, name3

暂时忘记我为什么要这样做(让我们只提一下这些项目实际上是可以动态扩展,覆盖等等的类声明。)

我如何欺骗Python(2.7)允许我声明这个包含所有项目定义的item_storage模块,并且仍然足以让导入机制起作用?

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解。但是你可以动态地动态创建导入行,然后使用exec来运行它。

exec "from item_storage import " + ", ".join(modules)

答案 1 :(得分:0)

我有一个我并不特别喜欢的解决方案:我已经使用sys.meta_path声明了自定义导入处理程序,所以现在import item_storage可以在我导入相关文件时随时随地工作第一次。

但是我希望一种技术更少侵入(为每次导入调用处理程序)。