python学习【152】:Python 3.7+ 新宠:@dataclass 让你告别样板代码
一、学前花絮
随着python学习的深入,我们了解到python因为全世界社区贡献,不断增加新功能、新模块,让python在各个领域展现风采。比如我们在学习类class的时候,第一步要做什么?要写__init__()方法,初始化类/实例变量。而这些变量为了在自定义方法或者实例化之后使用。但是在python3.7+版本之后,我们这一步工作可以省略了,可以直接关注业务逻辑,对于数据变量用@dataclass装饰器实现即可。二、Python3.7+中的@dataclass装饰器
2.1 @dataclass 是什么?
@dataclass 是一个类装饰器,它通过分析类中定义的带类型注解的字段,自动生成以下方法(默认开启):__repr__():友好的字符串表示(用于 print())你只需声明“这个类有哪些数据”,其余交给 Python!1.不用@dataclass的python代码
我们自定义类的时候,通常要自己编写init方法初始化变量;为了输出、比较方便还要编写repr、eq等方法。而一旦用了@dataclass,这些工作都可以省略了!2.用@dataclass的python代码
上面的代码与之前的代码是完全等价的。我们可以看到python的优雅了。当我们用了类装饰器的时候,我们只需要关注变量的类型即可,而初始化init等方法都可以省略了。2.2 用户只需关心“自定义方法”
@dataclass 的核心思想是:数据结构由装饰器处理,业务逻辑由你实现。比如,你想给 User 类加一个“打招呼”方法和一个判断年龄的方法:重点:你不再需要操心 self.name = name 这种机械赋值,专注写 greet() 这样的业务方法即可。2.3 高级用法:不可变对象 & 默认值
1. 创建不可变对象(类似 namedtuple)以上例子中,因为有frozen这个参数,让类中Point的变量不可修改,当程序中修改变量的时候,会报错!这是一种保护变量的方法。以上例子中,不仅实现了很少的代码而且给变量设置默认值。注意:有默认值的字段必须放在无默认值字段之后!2.4 对比传统写法:为什么推荐 @dataclass?
通过与传统写法相比,用类装饰器@dataclass的好处可见。2.5 以上内容的总结
- @dataclass 是 Python 3.7+ 定义“数据类”的最佳实践
- 你只需定义字段 + 编写自定义方法,开发效率大幅提升
- 适用于配置类、DTO、数据库模型、API 响应体等场景
三、小结
本篇内容侧重于实用,没有太多难以理解的地方。主要是针对python版本的发展有更多好用的装饰器可以拿来用,让我们更加体会到python的优雅!