Python 3.7 的一个新语法:Data Class

查看原文

Data Class 是 Python 3.7 引入的新语法,用于为类生成 Boilerplate 代码,减少写重复的代码,可以是 attrs 库的语言级别的替代品。示例:

from dataclass import dataclass
@dataclass
class MyClass:
    field: str = 'default'
  • 使用 @dataclass 迭代器使其变为 data class
  • 默认帮你实现好的方法:__init__, __repr__, __str__ __eq__。其中 init 支持 keyword arguments, 并有类型注解;eq 需要数据类型一致,顺序一致,值一致。
  • 可以通过 inspect.signature(MyClass.__init__) 查看方法签名。
  • 需要注意的是,类型注解只是注解,不会抛错或转换数据类型。
  • @dataclass(frozen=True):可以让数据不可变。
  • dataclass 默认的字段类型是 Field,你也可以通过 dataclass.field 自定义它的实现,钩子有:default, default_factory, init, repr, compare, hash.
  • 实现 def __post_init__(self): 方法,可以在 init 之后做一些想做的事情。
  • 继承的子类可以获得父类的字段,一种特殊的情形是:当父类字段有 default,子类字段没有,这时会报错 TypeError。