Python 3.7 python37:@dataset是否调用super.\uuuu init\uuuuu(…)?

Python 3.7 python37:@dataset是否调用super.\uuuu init\uuuuu(…)?,python-3.7,python-dataclasses,Python 3.7,Python Dataclasses,假设我有一个复杂的类,有很多输入。此类不是dataclass类。此外,如果我显式地导入它,我希望它抱怨我没有提供所有的参数 然而,出于接口目的和干净的代码,我想为构造函数定义默认值,并将复杂类的参数传递为或多或少的“已定义”dict 对于dataclass来说,这是一个很好的任务,我已经定义了一个dataclass类,它包含所有默认参数,并且我修改和操作了这些参数 @dataclass ComplicatedClassArgs: arg1: int arg2: bool = Fals

假设我有一个复杂的类,有很多输入。此类不是dataclass类。此外,如果我显式地导入它,我希望它抱怨我没有提供所有的参数

然而,出于接口目的和干净的代码,我想为构造函数定义默认值,并将复杂类的参数传递为或多或少的“已定义”dict

对于dataclass来说,这是一个很好的任务,我已经定义了一个dataclass类,它包含所有默认参数,并且我修改和操作了这些参数

@dataclass
ComplicatedClassArgs:
   arg1: int
   arg2: bool = False
   ...

我的问题是:我是否可以编写以下内容,并期望和/或告诉数据类使用我定义的所有命名属性调用super.init(…)

@dataclass
ComplicatedClassArgs(ComplicatedClass):
    arg1: int
    arg2: bool = False

    def some_meta_arg_manipulation_function(...):
        pass

    def some_other_arg_related_function(...):
        pass

这样我就知道我已经用一个数据类入口点组成了一个更高级的内部类行为了

我可能误解了您的用例,但在我看来,继承对于这里的工作来说是错误的工具。一个简单的
@classmethod
怎么样

@dataclass
复杂的分类参数:
arg1:int
arg2:bool
@类方法
来自dict的def(cls,kwargs=无):
“”使dclassargs工厂复杂化。
此方法提供了合理的默认值
可以通过输入kwargs替换,也可以不通过输入kwargs替换。
"""
如果kwargs为无:
kwargs={}
默认参数={
“arg1”:1,
“arg2”:False
}
返回cls(**{**default_参数,**kwargs})
>>>复杂的类参数()
回溯(最近一次呼叫最后一次):
...
TypeError:\uuuu init\uuuuu()缺失..必需的位置参数
>>>来自_dict()的复杂分类参数
复杂化类args(arg1=1,arg2=False)

是的,所以我有很多这样的东西,从我的观点来看,继承的目标是代码压缩。我有重复的代码,并且希望在我的数据类中继承重复的代码,这就是全部。也许你可以在你的帖子中包括一个需求列表。我现在理解的是1)你有一堆数据类2) 您想强制直接调用
\uuuu init\uuuuu
以提供所有属性3)您想单独调用以允许一些默认值4)您想用尽可能少的样板文件共享此模式。是否正确?