当前位置: 首页 > news >正文

DAY 29 复习日:类的装饰器

知识点回顾
  1. 类的装饰器
  2. 装饰器思想的进一步理解:外部修改、动态
  3. 类方法的定义:内部定义和外部定义

作业:复习类和函数的知识点,写下自己过去29天的学习心得,如对函数和类的理解,对python这门工具的理解等,未来再过几个专题部分我们即将开启深度学习部分。

一、对函数的理解进化:
1. 函数是第一公民:深刻理解了函数作为参数传递、返回值使用的灵活性
2. 装饰器魔法:通过类装饰器实践(如示例中的class_logger),掌握了函数闭包和作用域的精妙
3. 参数处理:*args/**kwargs的动态参数机制在实际开发中的强大威力二、类的认知突破:
1. 实例化过程:通过重写__init__方法(如示例中的new_init),理解了对象创建的完整生命周期
2. 方法绑定:实践了动态添加类方法(如log_message),体会到Python的动态特性
3. 封装艺术:通过SimplePrinter案例,掌握了通过类组织相关行为的封装技巧

输入

# 定义类装饰器:为类添加日志功能
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("这是装饰器添加的日志方法")  # 调用装饰器新增的方法

解释

🍰【类装饰器就像蛋糕店的新服务】🍰

原始蛋糕店(SimplePrinter类):

只有基础功能:做蛋糕(init) 和 包装蛋糕(print_text)

装修公司进场(class_logger装饰器):

# 装修步骤1:给做蛋糕流程加监控
def new_init(...):print("监控:开始制作蛋糕啦!")  # [LOG] 实例化对象
    original_init(...)            # 原来的做蛋糕流程不变# 装修步骤2:新增外卖服务
def log_message(...):print("外卖:您的蛋糕日志")     # 新增的log方法

装修后的蛋糕店(@class_logger装饰后的类):

保留原有功能 ✅

新增功能:自动记录每单制作(实例化时打印LOG)

支持外卖订单跟踪(log方法)

客户体验(使用示例):

printer = SimplePrinter("Alice")  
# 自动打印 → [LOG] 实例化对象: SimplePrinterprinter.log("草莓蛋糕已发货")      
# 输出 → [LOG] 草莓蛋糕已发货

装饰器像"外挂":不修改原类代码就能添加新功能

动态改造:运行时给类换"心脏"(替换__init__方法)

功能扩展:就像给手机装新APP,给类增加新方法

相关文章:

  • tauri2项目动态添加 Sidecar可行性方案(运行时配置)
  • 高能数造闪耀 CIBF 2025,以创新技术引领新能源智造新征程
  • 基于MCP的AI Agent应用开发实践
  • 【ComfyUI】关于ComfyUI的一些基础知识和入门设置以及快捷键小技巧【简单易懂】
  • 通过串口设备的VID PID动态获取串口号(C# C++)
  • Java基于数组的阻塞队列实现详解
  • 算法-js-柱状图中最大的矩形
  • Qt如何设置图标
  • 【PyQt5实战】五大对话框控件详解:从文件选择到消息弹窗
  • 等于和绝对等于的区别
  • CHAIN-OF-TABLE: 推理链中的演化表格用于表格理解
  • 智慧园区数据大脑管理平台整体解决方案
  • USB学习【11】STM32 USB初始化过程详解
  • 有源晶振与无源晶振 旁路模式与非旁路模式 深度剖析
  • 2009-2025计算机408统考真题及解析
  • 【数据结构与算法】ArrayList 与顺序表的实现
  • 济南国网数字化培训班学习笔记-第三组-2-电力通信光缆网认知
  • 20-HAL库
  • 加密芯片法(一)ATSHA204A 特性理解
  • 一次页面假死分析
  • 网络培训的网站建设/今日重点新闻
  • 南通网站建设教程/网站建站系统
  • 黄村网站建设一条龙/小网站搜什么关键词
  • 商洛免费做网站公司/广告传媒公司
  • 对网站的赏析/电子商务网店运营推广
  • 下列关于网站开发中/百度sem竞价推广pdf