设置模块中的动态条目

Dynamic entries in a settings module

我正在编写一个包,用于导入音频文件、处理它们、绘制它们等,用于研究目的。 在管道的每个阶段,设置都是从​​设置模块中提取的,如下所示。

我希望能够像 MODEL_NAME 一样更新全局设置,并在任何包含它的字典中进行更新。

settings.py

MODEL_NAME = 'Test1'
DAT_DIR = 'dir1/dir2/'
PROCESSING = {
    "key1":{
        "subkey2":0,
        "subkey3":1
    },
    "key2":{
        "subkey3":MODEL_NAME
    }
}

run.py

import settings as s
wavs = import_wavs(s.DAT_DIR)
proc_wavs = proc_wavs(wavs,s.PROCESSING)

一些我想包含的设置命令 MODEL_NAME,效果很好。当我想在 运行 时间内更改 MODEL_NAME 时,问题就出现了。所以如果我这样做:

import settings as s
wavs = import_wavs(s.DAT_DIR)
s.MODEL_NAME='test1'
proc_wavs1 = proc_wavs(wavs,s.PROCESSING)
s.MODEL_NAME='test2'
proc_wavs2 = proc_wavs(wavs,s.PROCESSING)

但显然这两个调用 s.PROCESSING 都将包含最初在设置文件中分配的 MODEL_NAME。 让它更新的最佳方式是什么?

我想到的可能的解决方案:

其他想法可能是 class 更新方法之类的,有没有人有更好的想法?

您想为执行波浪分析的函数配置在字典中构造的通用和特定设置。

首先定义一个设置 class,例如:

class Settings :

  data_directory = 'path/to/waves'

  def __init__(self, model):         
     self.parameters= {
       "key1":{
           "subkey1":0,
           "subkey2":0
       },
       "key2":{
           "subkey1":model
       }
     }

# create a new class based on model1
s1 = Settings('model1')
# attribute values to specific keys
s1.parameters["key1"]["subkey1"] = 3.1415926
s1.parameters["key1"]["subkey2"] = 42
# an other based on model2
s2 = Settings('model2')
s2.parameters["key1"]["subkey1"] = 360
s2.parameters["key1"]["subkey2"] = 1,618033989
# load the audio
wavs = openWaves(Settings.data_directory)
# process with the given parameters
results1 = processWaves(wavs,s1)
results2 = processWaves(wavs,s2)