Python 3数据类初始化

Yun*_*Gun 7 python python-3.x

除了内置的初始化程序所提供的内容外,数据类是否有办法添加其他初始化而不覆盖它?具体来说,我想检查整数列表的某些值,该值是初始化时数据类中的字段之一。

编辑:

事后看来,这不是最大的问题。但是,我不得不问这个问题的原因是我已经习惯了在google上找到答案,而在谷歌搜索这个问题时,没有可用的答案,通常最好的答案来自堆栈溢出,通常以搜索结果最高结果。因此,我将回答这个问题,以防它可能帮助其他不熟悉数据类的人学习使用它们。

Yun*_*Gun 11

数据类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}")
Run Code Online (Sandbox Code Playgroud)

定义该数据类,然后运行以下命令:

dc = DataClass(1) # Prints "My field is 1"
Run Code Online (Sandbox Code Playgroud)

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

这使您可以在初始化方法之后运行代码,以执行您可能要执行的任何其他设置/检查。

  • 谢谢!我尝试重新定义 __init__` 并想知道为什么它没有被调用并且任何断点都没有帮助:) (4认同)
  • 作为警告,如果您使用``from attr import dataclass```,这将不起作用! (3认同)
  • 这是金子!谢谢! (2认同)