Python 3数据类初始化

98

数据类是否有一种方式可以添加除其内置初始化程序提供的之外的其他初始化,而不必覆盖它?具体来说,我想在初始化时检查数据类中一个字段中的整数列表的某些值。


4
你读过 https://www.python.org/dev/peps/pep-0557/#post-init-processing 吗? - jonrsharpe
1个回答

186
数据类PEP所述,有一个__post_init__方法,它将是由__init__调用的最后一件事。
from dataclasses import dataclass

@dataclass
class DataClass: 
    some_field: int

    def __post_init__(self):
        print(f"My field is {self.some_field}")

定义这个数据类,并运行以下代码:

dc = DataClass(1) # Prints "My field is 1"

将{{some_field}}初始化为1,然后运行{{__post_init__}},打印{{My field is 1}}。

这允许您在初始化方法之后运行代码,以执行任何其他设置/检查。


2
提醒一下,如果你使用from attr import dataclass,这是不起作用的! - Meysam Sadeghi
4
谢谢!我尝试重新定义__init__,但不知道为什么它没有被调用,也无法通过任何断点来帮助 :) - wowkin2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接