【发布时间】:2019-07-26 14:38:31
【问题描述】:
我有一个包含大量路径的配置文件,我想以某种方式组织它们。所以我决定使用types.SimpleNamespace 这样做:
paths = SimpleNamespace()
paths.base = '...'
paths.dataset.encoded = '...'
我得到了:
AttributeError: 'types.SimpleNamespace' object has no attribute 'dataset'
我尝试定义paths.dataset,尽管我不需要它但它不起作用:
paths = SimpleNamespace()
paths.base = '...'
paths.dataset = '...'
paths.dataset.encoded = '...'
AttributeError: 'str' object has no attribute 'encoded'
我也试过这个:
_ = {
'base': '...',
'dataset': {
'encoded': '...',
}
}
paths = SimpleNamespace(**_)
结果如下:
>>> paths.dataset.encoded # Error
AttributeError: 'dict' object has no attribute 'encoded'
>>> paths.dataset['encoded'] # works
'...'
这意味着 SimpleNamespace 仅适用于一层命名空间,对吗?
还有其他解决方案吗?我的意思是一个解决方案,而不是像这样对每一层使用 SimpleNamespace:
dataset = SimpleNamespace()
dataset.encoded = '...'
paths = SimpleNamespace()
paths.base = '???'
paths.dataset = dataset
>>> paths.base
'???'
>>> paths.dataset.encoded
'...'
有什么想法吗?
【问题讨论】:
-
如果您期望配置的特定形状,为什么不将其定义为实际类而不是任意可扩展的命名空间?
-
@mistermiyagi 我试过了,但由于我对课程知之甚少而失败了。你能举个例子吗?提前致谢。
标签: python types namespaces