说我有一个包“colorExtentions”,在我的__init__.py
我有__all__=["red", "blue"]
。通过将模块添加到目录和__all__
列表,应该能够自动扩展此包。以下是否可接受或是否存在此类事情的另一种“最佳做法”?
import colorExtentions
from colorExtentions import *
for moduleName in colorExtentions.__all__:
colors.append(moduleName)
promptUserToChoose(colors)
答案 0 :(得分:3)
假设每种颜色都是一个类,我认为更好的解决方案是确保所有颜色都是单个类的子类(无论如何都是好的设计):
class Color:
...
然后,当您需要所有颜色的列表时,您只需导入包含类的任何模块,并执行:
from colorExtentions import *
colors = Color.__subclasses__()
这样,您最终会得到每个Color
子类的列表。
请注意,在2.x中,您需要新式类(继承自object
)才能使用__subclasses__()
方法。
答案 1 :(得分:0)
官方Python文档中不鼓励从模块中导入所有名称。参见:
http://docs.python.org/2/howto/doanddont.html#from-module-import
引用:
什么时候好呢
在某些情况下,从模块导入*就可以了:
- 互动提示。例如,从math import *制作Python 一个惊人的科学计算器。
- 使用>扩展C中的模块时Python中的模块。
- 当模块从import * safe。
宣传自己时
如果您坚持使用__all__
- 请使用其他名称,例如color_list
,并动态扩展该变量。然后导入该变量:
import colorExtentions
from colorExtentions import color_list
colors.extends(color_list)