python - Python数据类,验证初始化参数的pythonic方法是什么?
问题描述
在实例化之前验证 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
解决方案
在类上定义一个__post_init__
方法;如果定义,生成的__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
当该replace
函数用于创建新实例时,这甚至会起作用。
推荐阅读
- javascript - 这里的 setState 回调语法有什么区别?
- content-management-system - shopify - 有没有办法创建类似于“部分”的 cms-block 以从各种站点(产品/集合/页面)访问
- bash - “shopt -s lastpipe”有效吗?
- asp.net-core - 在 InvokeLossAsync 上填充可靠字典
- java - 故障排除和修复死锁
- c - 将浮点数与大数相乘只需将数字相加
- google-apps-script - 使用 getRange,是否可以确保忽略空单元格?
- karate - 空手道 API - 为什么响应不返回调用的功能文件
- c - 编译和执行时ac编程问题错误
- javascript - 过滤带有子数组的对象