在python(3.6)中,我正在使用SimpleNameSpace(可以轻松地转换为类)来存储不同模型运行的参数。大多数是动态创建的,但有些是手动创建或修改的。我需要跟踪使用的参数。我知道可以使用pickle轻松完成此操作-但这使手动编辑或创建新参数文件成为不可能(或至少很麻烦)。

我想将每个SimpleNameSpace保存为一个单独的.py文件,以后可以将其导入。

我可以为SimpleNameSpace定义创建一个字符串,然后将其写到.py文件中,但这看起来非常复杂并且容易出错。

伪代码如下:

paramRun1 = SimpleNameSpace(
  param1 = ...
  param2 = ...
...
)


我想将上面的代码写到paramRun1.py

然后可以在其他代码中使用它

from paramRun1 import paramRun1
p1 = paramRun1.param1
...


谢谢您的帮助,

标记

最佳答案

也许您可以尝试namedtuple

# paramRun1.py
from collections import namedtuple


paramRun1 = namedtuple("paramRun1", ["param1",  "param2"])
pr1 = paramRun1(1, 2)

# a more practical example
Student = namedtuple("Student", ["name", "age"])
Tom = Student("Tom", 18)


并像这样使用它:

>>> import paramRun1
>>> p1 = paramRun1.pr1.param1
>>> p1
1
>>> print(f"my name is {paramRun1.Tom.name}, I'm {paramRun1.Tom.age} old")
my name is Tom, I'm 18 old


我检索了正式文件,其内容如下:


  SimpleNamespace可能有用以代替class NS: pass。但是,对于结构化记录类型,请改用namedtuple()。


那么就您而言,您是否必须使用SimpleNamespace?

07-26 08:32