如何为Python中的几个类,函数指定许多默认值?

时间:2016-11-03 09:43:37

标签: python configuration initialization

这不是我的代码,但我遇到了类似的问题:

https://gist.github.com/songrotek/0c64d10cab5298c63cd0fc004a94ba1f

我想在一个中心位置编辑和更改许多参数(以尽可能多的语义方式),然后用于构造类,运行主程序等。 因为我不想把所有东西放在一个文件中(它太大了,我需要模块和不同的命名空间)并声明全局变量。 必须编辑代码来设置一些参数似乎不是一个好的解决方案。

class Example:
    def __init__(self, *initial_data, **kwargs):
        for dictionary in initial_data:
            for key in dictionary:
                setattr(self, key, dictionary[key])
        for key in kwargs:
            setattr(self, key, kwargs[key])

使用像这样的构造函数来为init使用字典似乎不够透明。

这个问题有哪些可行的解决方案?它仍然是我常用的代码而且相当小,因此它应该是轻量级/适合大小并且仍然易于使用和舒适的良好折衷。

1 个答案:

答案 0 :(得分:0)

处理此问题的常用方法是ConfigParser正在读取的配置文件。

以下是一个例子:

# configuration.ini
[Example1]

constant1: 1
constant2: 2

[Example2]

c1: 'one'
c2: 'two'
# test.py
from ConfigParser import ConfigParser

conf = ConfigParser()
conf.read('configuration.ini')

def configure_instance(instance):
    for i in conf.items(type(instance).__name__):
        setattr(instance, i[0], i[1])

class Example1(object):
    def __init__(self):
        configure_instance(self)

class Example2(object):
    def __init__(self):
        configure_instance(self)


e1 = Example1()
e2 = Example2()
print vars(e1)
print vars(e2)

# {'constant1': '1', 'constant2': '2'}
# {'c2': "'two'", 'c1': "'one'"}