擅长:python、mysql、java
<p>基于Martijn Pieters的解决方案,我做了以下工作:</p>
<p>1)创建一个实现post_init的混合</p>
<pre class="lang-py prettyprint-override"><code>from dataclasses import dataclass
no_default = object()
@dataclass
class NoDefaultAttributesPostInitMixin:
def __post_init__(self):
for key, value in self.__dict__.items():
if value is no_default:
raise TypeError(
f"__init__ missing 1 required argument: '{key}'"
)
</code></pre>
<p>2)然后在存在继承问题的类中:</p>
<pre><code>from src.utils import no_default, NoDefaultAttributesChild
@dataclass
class MyDataclass(DataclassWithDefaults, NoDefaultAttributesPostInitMixin):
attr1: str = no_default
</code></pre>