首页 > 解决方案 > 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

标签: pythonpython-3.xpython-dataclasses

解决方案


在类上定义一个__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函数用于创建新实例时,这甚至会起作用。


推荐阅读