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

Mininet--log.py-makeListCompatible装饰器解析

在这里插入图片描述

makeListCompatible 装饰器的调用位置在 log.py日志初始化部分,具体流程如下:


调用位置与作用

在代码末尾的初始化阶段,原始日志方法(如 lg.info)被 makeListCompatible 装饰器包装,生成支持多参数输入的新方法。以下是关键代码段:

# 初始化日志器和日志方法
logging.setLoggerClass(MininetLogger)
lg = logging.getLogger("mininet")

# 原始日志方法列表:lg.info, lg.output, lg.warning, lg.error, lg.debug
_loggers = lg.info, lg.output, lg.warning, lg.error, lg.debug

# 使用装饰器包装每个日志方法,支持多参数输入
_loggers = tuple(makeListCompatible(logger) for logger in _loggers)

# 将装饰后的方法重新赋值给日志器
lg.info, lg.output, lg.warning, lg.error, lg.debug = _loggers

# 导出为全局函数
info, output, warning, error, debug = _loggers

装饰器工作原理

1. 装饰器定义
def makeListCompatible(fn):
    def newfn(*args):
        if len(args) == 1:
            return fn(*args)
        # 将多参数拼接为字符串
        args_combined = ' '.join(str(arg) for arg in args)
        return fn(args_combined)
    return newfn
2. 装饰器调用过程
  • 原始方法:例如 lg.info 是一个普通的日志方法,只能接受单个参数(字符串)。
  • 装饰后方法:通过 makeListCompatible(lg.info),生成一个新方法 newfn
    • 当用户调用 info('a', 1, 'b') 时:
      1. newfn 接收到参数 ('a', 1, 'b')
      2. 检查参数数量:len(args) > 1,执行拼接操作。
      3. 拼接后参数变为 'a 1 b'
      4. 调用原始的 lg.info('a 1 b')

实际效果验证

示例代码
from mininet.log import info

# 调用装饰后的 info 方法
info('Host', 1, 'status:', 'up')  # 多参数调用
输出结果
Host 1 status: up
等效代码
# 原始方法调用(未经装饰)
lg.info('Host 1 status: up')

关键点总结

  1. 调用位置:装饰器在日志初始化阶段被批量应用到所有日志方法(info, output, warning 等)。
  2. 作用:将多参数输入自动拼接为单个字符串,简化用户调用方式。
  3. 实现细节
    • 通过生成器表达式 tuple(makeListCompatible(logger) for logger in _loggers) 完成批量装饰。
    • 装饰后的方法重新赋值给日志器,并导出为全局函数。

通过这种方式,用户可以直接使用 info('a', 1, 'b') 的简洁语法,而无需手动拼接字符串。


相关文章:

  • I.MX6ULL 开发板上挂载NTFS格式 U 盘
  • 免去繁琐的手动埋点,Gin 框架可观测性最佳实践
  • 【Bug】记录2025年遇到的Bug以及修复方案
  • Box86源码剖析(一)
  • OMI(operating mode indication)
  • 从零开始跑通3DGS教程:(一)数据(采集)
  • 智能化OCR:揭开图片数据泄露的“隐形面纱”
  • 数据库——MySQL字符、日期函数
  • MySQL基础语法1
  • ZygoPlanner:一种基于图形的三阶段框架,用于颧骨种植体植入的最佳术前规划|文献速递-医学影像人工智能进展
  • Kubernetes》》k8s》》Replication Controller
  • NoSQL 数据库深度解析与 20 款产品对比
  • pandas【2】DataFrame/Series
  • leetcode102 二叉树的层次遍历 递归
  • Multi-Stage Progressive Image Restoration论文阅读
  • JavaScript网页设计高级案例:构建交互式图片画廊
  • Java 8-17核心特性全景解析之Java11
  • suse15 sp1使用华为云软件源yum源zypper源
  • 树形结构溯源dp
  • DeepSeek 本地化部署教程
  • 哈尔滨正规制作网站公司/青柠影院免费观看电视剧高清
  • 专业做ea的网站/淘宝美工培训推荐
  • wordpress 精品主题/厦门百度seo公司
  • 现在网站开发语言有/泉州百度推广排名优化
  • pxhere素材网站/电商网络销售是做什么
  • 网站建设服务合同/广西seo优化