【发布时间】:2021-12-30 05:45:37
【问题描述】:
我正在尝试构建一个框架,该框架首先读取包含一些键和相应值的输入文件。然后我相应地更新变量:
from Inertia import Inertia
...
d = hf.read_input(fin)
locals().update(d)
然后,我定义组 MDA:
class MDA(om.Group):
class ObjCmp(om.ExplicitComponent):
def setup(self):
...
def setup_partials(self):
...
def compute(self, inputs, outputs):
...
def setup(self):
...
其中包含两个子系统(目前):
self.add_subsystem('d1', SomeModule(), promotes_inputs=['x1','x2'],
promotes_outputs=['y1','y2'])
self.add_subsystem('obj_cmp', self.ObjCmp(), promotes_inputs=['y1'],
promotes_outputs=['obj'])
出于内部管理的原因,由于框架最终将包含大量子系统,我想将定义特定子系统的类保留在单独的脚本中,导入主脚本(定义 Group 的脚本)。
我面临的问题是,如果我只在定义 Group 的脚本级别读取输入文件一次(在进入 Group() 类之前),那么以这种方式检索的变量不会在例如,较低的级别,我不能在 SomeModule() 中使用它们。我通常会在 SomeModule() 中定义一个 init() 方法,以便能够传递一些变量:
def __init__(self, d):
self.d = d
但是由于我们在 self.add_subsystem() 中实例化了 SomeModule() 类,所以它不起作用。
如果有任何提示,我将不胜感激。
【问题讨论】:
标签: class variables input openmdao globals