Python 7+ @装饰器:优雅编程新体验

📅 2026/7/6 13:59:20 👁️ 阅读次数 📝 编程学习
Python 7+ @装饰器:优雅编程新体验

一、学前花絮

学习深入后, 我们知晓, 因全世界社区贡献, 不断增添新功能、新模块, 使其在各个领域展现出独特风采, 过程层层递进, 原因相互关联, 结果显著突出。

先比如说在我们学习类class之时, 第一步要做些什么呢, 要去写()方法, 以此来初始化类以及实例变量, 而这些变量是意在自定义方法或者实例化之后加以使用的, 然而在.7+版本往后, 我们这一步工作能够省略掉了, 能够直接去关注业务逻辑, 对于数据变量借助@装饰器达成即可。

二、.7+中的@装饰器2.1 @ 是什么?

@是一种类装饰器, 它借助对类里所定义的带有类型注解的字段予以分析, 进而自动生成如下方法, 此为默认开启状态:

():初始化实例

():友好的字符串表示(用于 print())

():支持 == 比较

你只需声明“这个类有哪些数据”,其余交给 !

不用@的代码

我们在进行自定义类操作时, 一般要自行撰写 init 方法来对变量予以初始化;为迎合输出以及比较便捷的需求, 也得去编写 repr、eq 等方法。然而一旦运用了 @, 这些相关工作均可省略掉!

2.用@的代码

上面的代码跟之前的代码是全然等价的, 我们能够瞧见其优雅之处了。在我们运用了类装饰器之际, 我们仅仅需要留意变量的类型就行, 而初始化init等方法均可省略掉了。

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

@ 的核心思想是:数据结构由装饰器处理,业务逻辑由你实现。

比如, 你打算给 User 类增添 一个“打招呼”的方法, 以及一个用于判断年龄的方法:

调用上面的方法:

输出结果:

关键要点在于, 你无需去操心像 self.name = name 这般缺乏灵活性的赋值操作了, 只需全神贯注地去编写类似于 greet() 这种与业务紧密相关的方法就行。

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

@ 还支持更多实用配置:

1. 创建不可变对象(类似 )

以上所列举的例子当中, 鉴于存在这样一个参数, 致使类里面Point的变量于可修改方面受到限制, 在程序运行期间于修改变量之际, 将会出现报错的情况!这属于一种对变量予以保护的方式。

2. 设置默认值

在上述所列举的例子当中, 不但达成了数量极少的代码编写, 并且还针对变量进行了默认值的设定。需要留意的是, 那些具备默认值的字段, 是一定要放置在没有默认值的字段的后面的!

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

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

2.5 以上内容的总结三、小结

针对本篇章内容来讲, 其侧重点在于实用, 不存在太多难以理解之处, 主要是就版本的发展而言, 有更多好用的装饰器可供拿来使用, 从而让我们更能体会到那份优雅!

让我们保持学习热情,多做练习。我们下期再见!快乐男孩。