1 回答
TA贡献1862条经验 获得超7个赞
你不能。每次调用都会创建一个新函数,__init__然后将其丢弃,它不存在于函数之外。请注意,这也适用于由创建的类namedtuple('Config', dictionary.keys())(**dictionary)。继续创建所有这些不必要的类确实不好,这完全违背了namedtuple创建内存高效记录类型的目的。在这里,每个实例都有自己的类!
以下是您应该如何定义它:
Config = namedtuple('Config', "foo bar baz")
def convert(dictionary): # is this really necessary?
return Config(**dictionary)
class Configuration:
def __init__(self, config_file=None, config=None):
if config_file is not None:
with open(config_file) as in_file:
self._config = yaml.load(in_file, Loader=yaml.FullLoader)
elif config is not None:
self._config = config
else:
raise ValueError("Could not create configuration. Must pass either location of config file or valid "
"config.")
self.input = convert(self._config["input"])
self.output = convert(self._config["output"])
self.build = convert(self._config["build_catalog"])
虽然在这一点上,使用它似乎更干净
Config(**self._config["input"])
etc 而不是 helper convert。
添加回答
举报