我有一个超级数据类(设置)和多个继承超级数据类(FSettings、BSettings)设置的子级
如果适用,我如何将“参数”字典以设置它们的方式传递给子数据类
from dataclasses import dataclass
@dataclass()
class Settings:
verbose: bool
detailed: bool
@dataclass()
class FSettings(Settings):
vals: list
def __init__(self, args):
for arg in args:
if arg in list(self.__annotations__):
self.__setattr__(arg, args[arg])
if __name__ == '__main__':
args = {'vals': ["a", "b"], 'verbose': True, 'detailed':False}
s = FSettings(args)
print(s)
如果我打印list(self.__annotations__)
,它会显示['vals']
,忽略verbose
和detailed
(试了一个小时后我自己的答案)
这似乎可行,但您必须将默认值设置为“无”,因为FSettings值在设置值之后启动。如果没有默认值,hasattr将返回
false
init也可以移动到父类,因为它是泛型的。但是,子级中需要
super().__init__()
,否则父级值填充错误(错误不一致,不完全确定原因)相关问题 更多 >
编程相关推荐