深入解析:DAY 29 复习日:类的装饰器

@浙大疏锦行知识点回顾
1.类的装饰器
2.装饰器思想的进一步理解:外部修改、动态
3.类手段的定义:内部定义和外部定义
作业:复习类和函数的知识点,写下自己过去29天的学习心得,如对函数和类的理解,对python这门应用的理解等,未来再过几个专题部分我们即将开启深度学习部分。
先来解释一下装饰器

装饰器?就是1. 什么

想象一下装饰器就像给你的手机套上一个手机壳

  • 手机本身的功能不变(打电话、上网)

  • 但手机壳给它增加了新效果(防摔、美观)

在Python中,装饰器就是这样的"外壳",它可以在不修改原有代码的情况下,给函数或类添加新特性。

类的装饰器是一个函数,它接收一个类作为输入,对这个类进行修改或增强,之后返回修改后的类。

通过你能够把它想象成一个类的加工厂类的定制工具

一个生动的比喻

想象一下你要买一辆基础款的汽车(这就像是原始的类):

  1. 基础款汽车:能开,有基本功能。

  2. 装饰器(汽车改装厂):你把这辆基础款汽车送进一家改装厂。

  3. 改装厂的工作

    • 给你车的引擎加上涡轮增压(增强性能)。

    • 给车漆上一个特殊的颜色(修改外观)。

    • 给车装上一个全新的高级音响系统(添加新功能)。

  4. 最终结果:你得到了一辆还是原来的车,但更强、更漂亮、功能更多的汽车。

这个“改装厂”就是类的装饰器。它不改变汽车最核心的结构(四个轮子、方向盘、发动机),而是在此基础上进行升级。

"""
既然函数可以复用,有了类和装饰器,那么类还能进一步封装么?可以的,类也有装饰器
回顾一下,函数的装饰器是 :接收一个函数,返回一个修改后的函数。我们之前是用复用的思想来看装饰器的,换一个角度理解,当你想修改一个函数的时候,可以通过装饰器方法来修改而无需重新定义这个函数。
类也有修饰器,他的逻辑类似:接收一个类,返回一个修改后的类。例如
1. 添加新的方法或属性(如示例中的 log 方法)。
2. 修改原有方法(如替换 __init__ 方法,添加日志)。
3. 甚至可以返回一个全新的类(继承或组合原类)。
通过类装饰器,可以在不修改类内部代码的情况下,为多个类统一添加功能(如日志、统计)
"""
# 定义类装饰器:为类添加日志功能
def class_logger(cls):
# 保存原始的 __init__ 方法
original_init = cls.__init__
def new_init(self, *args, **kwargs):
# 新增实例化日志
print(f"[LOG] 实例化对象: {cls.__name__}")
original_init(self, *args, **kwargs)  # 调用原始构造方法
# 将类的 __init__ 方法替换为新方法
cls.__init__ = new_init
# 为类添加一个日志方法(示例)
def log_message(self, message):
print(f"[LOG] {message}")
cls.log = log_message  # 将方法绑定到类,这是一种将外部函数添加为类的属性的方法
return cls
# 定义简单打印类,应用装饰器
# 同样是语法糖的写法
@class_logger
class SimplePrinter:
def __init__(self, name):
self.name = name  # 构造方法:初始化名称
def print_text(self, text):
"""简单打印方法"""
print(f"{self.name}: {text}")
# 使用示例
printer = SimplePrinter("Alice")  # 实例化时触发装饰器的日志
printer.print_text("Hello, World!")  # 调用普通方法
printer.log("这是装饰器添加的日志方法")  # 调用装饰器新增的方法

posted @ 2025-09-05 11:36  yfceshi  阅读(6)  评论(0)    收藏  举报