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

Python打卡训练营day29-类的装饰器

知识点回顾

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

相比函数装饰器只能增强单个函数的行为。类装饰器可以 动态为类添加新方法

为圆类添加体积方法

import math  def add_volume(cls):def volume(self):return 4/3 * self.radius**3 * math.picls.volume = volume           # 动态添加类return cls@add_volume
class Circle:  # 定义一个类def __init__(self, radius=1): # 传入半径self.radius = radius      # self.radius 是实例属性(可修改属性名,需同步改方法中的用)def calculate_area(self):              # 定义周长方法return math.pi * self.radius ** 2  # math.pi 是固定常量,self.radius 是实例属性def calculate_circumference(self):     # 定义面积方法return 2 * math.pi * self.radius
cir1 = Circle(1)
print(cir1.volume())

4.1887902047863905

为类的方法添加日志

def log_all_methods(cls):for name, method in cls.__dict__.items():if callable(method):# 立即绑定当前的 name 值def logged_method(method, name=name):  # 关键:name=name 立即捕获当前值def wrapper(*args, **kwargs):print(f"[LOG] 调用方法: {name}")  # 使用闭包外层的 namereturn method(*args, **kwargs)return wrappersetattr(cls, name, logged_method(method))return clsCircle = log_all_methods(Circle)cir2 = Circle(2)
print(cir2.calculate_circumference())

[LOG] 调用方法: __init__

[LOG] 调用方法: calculate_circumference

12.566370614359172

通过装饰器为类添加父类

class LogMixin:  # 定义一个混入类(提供日志功能)def log(self, message):print(f"[LOG] {message}")def add_mixin(cls):# 动态添加 LogMixin 为父类return type(cls.__name__, (cls, LogMixin), {})@add_mixin  # 添加 LogMixin 为父类
class MyClass:passobj = MyClass()
obj.log("测试日志")  # 输出 "[LOG] 测试日志"

http://www.xdnf.cn/news/8070.html

相关文章:

  • 深入学习和对比Python 列表与元组
  • 测量尺子:多功能测量工具,科技改变生活
  • PP-YOLOE-SOD学习笔记1
  • ThreadLocal线程本地变量在dubbo服务使用时候遇到的一个坑
  • Docker Compose`down`和`stop`命令的区别
  • 【RocketMQ 生产者和消费者】- 生产者启动源码-上报生产者和消费者心跳信息到 broker(3)
  • Modelsim的入门使用和Verilog编写
  • 【电流探头】LOTO电流探头线性度测量
  • Docker-mongodb
  • JavaWeb Web基础
  • 零碳办会新范式!第十届国际贸易发展论坛——生物能源和可持续发展专场,在京举办
  • 前端性能优化方案
  • 亚马逊英国站海关新规深度解读与合规指南
  • 中级统计师-统计学基础知识-第六章 回归分析
  • 快速部起一个Openwhisk平台,使用telego k8s服务部署能力内网部署
  • 中小制造企业网络安全防护指南
  • Linux Docker下安装tomcat
  • Spring3+Vue3项目中的知识点——跨域与解决方案
  • Gartner《如果有效评估Generative AI项目的投资回报》学习心得
  • DeepSeek快速搭建个人网页
  • vue3基本介绍
  • 220V转1.25V-12V输出电路Multisim仿真
  • 【设计模式】责任链+模板+工程模式使用模板
  • indicator-sysmonitor 在Ubuntu 右上角实时显示CPU/MEM/NET的利用率
  • C#对集合进行分组IGroupingout TKey, out TElement>
  • 01. Qt介绍及Qt开发环境搭建(2025.05最新官网下载方式)
  • C++初阶-list的使用2
  • AI编程: OpenAI Codex vs Google Jules vs GitHub Copilot++
  • 5G 核心网切换机制全解析:XN、N2 与移动性注册对比
  • 初步尝试AI应用开发平台——Dify的本地部署和应用开发