这不是我的代码,但我遇到了类似的问题:
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使用字典似乎不够透明。
这个问题有哪些可行的解决方案?它仍然是我常用的代码而且相当小,因此它应该是轻量级/适合大小并且仍然易于使用和舒适的良好折衷。
答案 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'"}