【发布时间】:2020-05-27 12:09:43
【问题描述】:
在实例化之前验证 init 参数的 Pythonic 方法是什么?
我认为也许利用__new__ dunder 方法是合适的?
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
【问题讨论】:
-
您是否考虑过简单地禁止调用者为这两个字段指定值?例如设置
is_bad: bool = field(init=False),然后在__post_init__中设置self.is_bad = not self.is_good。 -
thanks @chepner
field(init=False)也是一个很酷的主意。
标签: python python-3.x python-dataclasses