在实例化之前不覆盖内置init的数据类的情况下,验证init参数的pythonic方法是什么?
我认为也许利用__new__
秘密方法会合适吗?
from dataclasses import dataclass
@dataclass
class MyClass:
is_good: bool = False
is_bad: bool = False
def __new__(cls, *args, **kwargs):
instance: cls = super(MyClass, cls).__new__(cls, *args, **kwargs)
if instance.is_good:
assert not instance.is_bad
return instance
最佳答案
定义a __post_init__
method on the class;如果定义,生成的__init__
将调用它:
from dataclasses import dataclass
@dataclass
class MyClass:
is_good: bool = False
is_bad: bool = False
def __post_init__(self):
if self.is_good:
assert not self.is_bad
当使用the
replace
function创建新实例时,这甚至可以工作。