Python中dataclass背景说明
一、背景
@dataclass 装饰器是 Python 3.7 新增的,它可以用来轻松地创建数据类(dataclass)。简单来说,就是你定义一个很普通的类,@dataclass
装饰器可以帮你生成 __repr__
、 __init__
等方法【special method(即:特殊方法)】,就不用自己再写一遍了。
二、解决的问题
1、简化数据类的定义。使用 @dataclass 可以不必定义 init 方法和类似 eq 这样的方法,它会自动为我们添加。
2、数据类更易于使用。拥有默认的 repr 方法,可以Print调试,eq 方法可以判断两个对象是否相等等。
3、数据类更健壮。添加新字段不会影响现有代码,因为会自动添加到 init 方法。
举个例子,我们定义一个 User 数据类:
python
from dataclasses import dataclass
@dataclass
class User:
username: str
age: int
这相当于:
python
class User:
def __init__(self, username, age):
self.username = username
self.age = age
def __repr__(self):
return f'User(username={self.username}, age={self.age})'
但是使用 @dataclass 我们无需定义 init 和 repr 等方法。
所以如果你需要构建一些简单的存放数据的类@dataclass 是一个非常推荐的装饰器。它可以彻底简化数据类的定义和使用,这也是它被添加到 Python 中的初衷。