【问题标题】:How to specify many default values for several classes, functions in Python?如何在 Python 中为多个类、函数指定多个默认值?
【发布时间】:2016-11-03 09:43:36
【问题描述】:

这不是我的代码,但我有类似的问题:

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 使用字典似乎不够透明。

这个问题有哪些可能的解决方案?它仍然是我主要使用的代码,而且相当小,所以它应该是轻量级/适合大小和仍然易于使用和舒适之间的一个很好的折衷。

【问题讨论】:

  • 您可以将字典传递给**kwargs。例如,如果您的字典名为d,您可以传递**d。是这个意思吗?
  • 不确定我是否正确理解您的担忧,但它是否符合此处讨论的方向:[stackoverflow.com/questions/6198372/…

标签: python configuration initialization


【解决方案1】:

处理此问题的常用方法是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'"}

【讨论】:

  • 缺点是使用ini文件的方式,所有的变量都是字符串。您可以将其切换为自动检测变量类型的 YAML (pyyaml.org/wiki/PyYAML)。
猜你喜欢
  • 2014-10-12
  • 2015-09-07
  • 2014-06-25
  • 1970-01-01
  • 2012-09-10
  • 2014-03-09
  • 1970-01-01
  • 2011-12-06
  • 2021-10-27
相关资源
最近更新 更多