【发布时间】:2022-01-27 08:59:20
【问题描述】:
您好,
我正在做一个使用 yaml 配置文件的小项目。最近我想知道在 (1) 将先前初始化的配置字典直接加载到模块中,(2) 将配置值作为参数传递或 (3) 其他方式中,哪种做法更好(使代码更具可读性、可扩展性和可维护性)。
示例代码:
config.yml:
my_foo: foo
my_bar: bar
案例(一):
my_config.py:
import yaml
with open(config.yaml, "r") as stream:
try:
my_config = yaml.safe_load(stream)
except yaml.YAMLError as exc:
print(exc)
my_foo.py:
from my_config import my_config
class MyFoo:
def __init__(self):
self.val = my_config[my_foo]
my_bar.py:
from my_config import my_config
class MyBar:
def __init__(self):
self.val = my_config[my_bar]
my_main.py:
from my_foo import MyFoo
from my_bar import MyBar
my_foo_instance = MyFoo()
my_bar_instance = MyBar()
案例(2):
my_foo.py:
class MyFoo:
def __init__(self, val):
self.val = val
my_bar.py:
class MyBar:
def __init__(self, val):
self.val = val
my_main.py:
from my_foo import MyFoo
from my_bar import MyBar
with open(config.yaml, "r") as stream:
try:
my_config = yaml.safe_load(stream)
except yaml.YAMLError as exc:
print(exc)
my_foo_instance = MyFoo(val=my_config[my_foo])
my_bar_instance = MyBar(val=my_config[my_bar])
【问题讨论】:
-
该配置是整个项目的配置文件还是仅适用于
MyClass?在后一种情况下,我将创建一个类方法,将您的配置文件加载到类上下文中。 -
我为整个项目使用一个配置文件。我编辑了问题以更好地反映我的情况。
-
为什么你有两个从同一个配置文件中填充的类?我认为您可能需要详细说明您的用例。事实上,例如,很难确定
MyFoo.val属性的使用;取决于此,可能根本不需要 YAML 配置文件。
标签: python configuration yaml