Python:导入模块时设置配置的推荐方法是什么?
我看到有人用“猴子补丁”这种方法来设置模块的选项,比如:
import mymodule
mymodule.default_img = "/my/file.png"
mymodule.view_default_img()
还有,像Django这样的框架有一个settings.py文件,用来管理整个Django应用的设置,这让我有点不舒服。
那么,还有什么其他方法可以管理模块的配置设置呢?有什么推荐的方式吗?似乎没有特别好的方法来设置模块级别的配置。
显然,完全避免配置是最理想的,通常使用类或者把参数传给函数会更好。但是,有时候你无法完全避免设置某些东西,有时候为了方便,确实有必要有一些全局的模块设置(比如Django的模板系统——如果每个模板都要指定基础路径,那简直是个噩梦,绝对不是好的代码风格)。
1 个回答
3
一个选择是使用ConfigParser模块。你可以把设置放在一个非Python的配置文件里,然后每个模块都从这个文件中读取自己的设置。另一个选择是在每个模块里设置一个配置方法,客户端代码可以把参数传给这个方法。
# foo.py
setting1 = 0
setting2 = 'foo'
def configure(config1, config2):
global setting1, setting2
setting1 = config1
setting2 = config2
然后在导入模块的时候,
import foo
foo.configure(42, 'bar')
我个人觉得,最好的方法是像Django那样使用设置文件。