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。