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

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] 测试日志"

相关文章:

  • 并发编程实战--对象的共享
  • 基于机器学习的策略开发和Backtrader回测
  • JAVA SE — 循环与分支和输入输出
  • VS Code + Maven 创建项目
  • JDK8中的 Stream流式编程用法优化(工具类在文章最后)
  • 【记录】PPT|PPT打开开发工具并支持Quicker VBA运行
  • C++初阶-list的使用1
  • Ubuntu 通过指令远程命令行配置WiFi连接
  • GuzzleHttp和DomCrawler的具体用途?
  • 【自用-python】生成准心居中exe程序,防止云电脑操作时候鼠标偏移
  • 谷歌开源医疗领域多模态生成式AI模型:medgemma-4b-it
  • 关于常见日志的几种级别和格式
  • mapbox V3 新特性,实现三维等高线炫酷效果
  • 工业物联网中隐私保护入侵检测的联邦学习增强型区块链框架
  • MyBatis-Plus的自带分页方法生成的SQL失败:The error occurred while setting parameters
  • 522UART是什么
  • 【项目】抽奖系统bug历程(持续更新)
  • Git分支的强制回滚
  • Python Click库:轻松构建优雅的命令行工具
  • 技术篇-2.1.C\C++应用场景及开发工具安装
  • 和网站建设相关的行业/微信crm系统软件
  • 微信开放品牌/网站建设seo
  • 浙江华企网站做的咋样/世界新闻最新消息
  • 长沙市做网站的网站/app推广引流
  • 淄博市沂源县建设局网站/软文兼职
  • 域名分类网站/哈尔滨百度网站快速优化