Python 2 - 向导入对象添加方法

Python 2 - add method to imported object

使用尚未实现 logging.Logger.getChild(name) 的 Python 2.6,如何在依赖它的现有程序中向后移植此功能?

该函数的代码基本上可以减少到一行,我尝试将其作为 lambda 函数放入 Logger class,就像在我的程序顶部这样:

import sys, logging
if sys.version_info <= (2, 6):
    logging.Logger.getChild = lambda self, suffix:\
        self.manager.getLogger('.'.join((self.name, suffix)) if self.root is not self else suffix)

但是 Travis-CI 仍然告诉我它没有工作,有很多这样的错误:

self.logger = logger.getChild('Browser')
E   AttributeError: Logger instance has no attribute 'getChild'

其中全局变量 logger 在此之前被初始化:

logger = logging.getLogger(__name__)

这里我的错误是什么?我如何在不遗漏 getChild(name) 函数的情况下调整我的代码以支持 Python 2.6?

如果 sys.version_info returns(如在我的测试中)一个包含 2 个以上元素的元组,您的版本检查将失败:

>>> sys.version_info
(2, 6, 6, 'final', 0)
>>> sys.version_info <= (2, 6)
False

导致您的后台端口从未被定义。一种解决方法是限制对前两个元素的比较:

if sys.version_info[:2] <= (2, 6):
    ...