当前位置:首页>python>python学习【152】:Python 3.7+ 新宠:@dataclass 让你告别样板代码

python学习【152】:Python 3.7+ 新宠:@dataclass 让你告别样板代码

  • 2026-09-02 19:35:52
python学习【152】:Python 3.7+ 新宠:@dataclass 让你告别样板代码

一、学前花絮

随着python学习的深入,我们了解到python因为全世界社区贡献,不断增加新功能、新模块,让python在各个领域展现风采。
比如我们在学习类class的时候,第一步要做什么?要写__init__()方法,初始化类/实例变量。而这些变量为了在自定义方法或者实例化之后使用。但是在python3.7+版本之后,我们这一步工作可以省略了,可以直接关注业务逻辑,对于数据变量用@dataclass装饰器实现即可。

二、Python3.7+中的@dataclass装饰器

2.1 @dataclass 是什么?

@dataclass 是一个类装饰器,它通过分析类中定义的带类型注解的字段,自动生成以下方法(默认开启):
__init__():初始化实例
__repr__():友好的字符串表示(用于 print())
__eq__():支持 == 比较
你只需声明“这个类有哪些数据”,其余交给 Python!

1.不用@dataclass的python代码

我们自定义类的时候,通常要自己编写init方法初始化变量;为了输出、比较方便还要编写repr、eq等方法。而一旦用了@dataclass,这些工作都可以省略了!

2.用@dataclass的python代码

上面的代码与之前的代码是完全等价的。我们可以看到python的优雅了。当我们用了类装饰器的时候,我们只需要关注变量的类型即可,而初始化init等方法都可以省略了。

2.2 用户只需关心“自定义方法”

@dataclass 的核心思想是:数据结构由装饰器处理,业务逻辑由你实现。
比如,你想给 User 类加一个“打招呼”方法和一个判断年龄的方法:
调用上面的方法:
输出结果:
重点:你不再需要操心 self.name = name 这种机械赋值,专注写 greet() 这样的业务方法即可。

2.3 高级用法:不可变对象 & 默认值

@dataclass 还支持更多实用配置:
1. 创建不可变对象(类似 namedtuple)
以上例子中,因为有frozen这个参数,让类中Point的变量不可修改,当程序中修改变量的时候,会报错!这是一种保护变量的方法。
2. 设置默认值
以上例子中,不仅实现了很少的代码而且给变量设置默认值。注意:有默认值的字段必须放在无默认值字段之后!

2.4 对比传统写法:为什么推荐 @dataclass?

通过与传统写法相比,用类装饰器@dataclass的好处可见。

2.5 以上内容的总结

  • @dataclass 是 Python 3.7+ 定义“数据类”的最佳实践
  • 它自动处理初始化、打印、比较等重复逻辑
  • 你只需定义字段 + 编写自定义方法,开发效率大幅提升
  • 适用于配置类、DTO、数据库模型、API 响应体等场景

三、小结

本篇内容侧重于实用,没有太多难以理解的地方。主要是针对python版本的发展有更多好用的装饰器可以拿来用,让我们更加体会到python的优雅!
让我们保持学习热情,多做练习。我们下期再见!

最新文章

随机文章