【发布时间】:2014-08-16 07:32:09
【问题描述】:
如何调用公共子模块(存在于各种模块中),从值中选择正确的模块?
例子:
假设我有这个文件夹结构:
myprogram/
myprogram.py #main program
colors/ #colors package
__init__.py #contains __all__
blue/ #blue module
paint.py #submodule
red/ #red module
paint.py #submodule
paint 子模块在每个模块中具有相同的名称,但每个模块中的代码不同。
在 myprogram.py 我想做这样的事情:
import colors #import all the colors modules
my_shape = circle()
my_color = "blue" #define the module to call by his name
if my_color in colors:
colors.my_color.paint(my_shape) #calls the submodule from the right mosule
我希望“颜色”包具有可扩展性,这样我就可以轻松地从一次部署中删除一种颜色。
(我可以制作一个带有内部案例的paint.py模块,但它不容易扩展)
问题是:
- 可以做
if my_module in package的事情吗? - 如果是这样,我可以使用变量
package.my_module_variable.function()调用包的模块吗?
我正在尝试解决这个问题storing functions into dicts,我的方法是否正确?
【问题讨论】:
-
您没有提供有关
paint.py工作原理的详细信息,但我会说拥有一个包含不同颜色或可以用所选颜色实例化的paint.py更有意义。您可以使用dict代替paint中的大“如果”,它应该可以很好地扩展。这是假设颜色表现相同。 IIRC,您可以在包中搜索模块,存储它然后调用它,但这是一种矫枉过正/不优雅的方式,恕我直言。 -
你可以看看这个关于dynamic module import的相关SO问题
标签: python data-structures scalability packages