python - 使用来自另一个模块的特定方法扩展类
问题描述
我正在尝试使用“日志记录”模块中包含的一些输出函数来扩展我的自定义类“测试”。我有一个名为“打印”的自定义日志记录级别,这导致了我的问题。我尝试了多种方法,每种方法都有一些缺点。有没有其他比我想念的更好的方法。
我希望能够在对象上使用 vars() 而只打印出不是记录方法的属性。
此方法有效,但打印出“打印”方法(我不想要)
#Test.py
logger = logging.getLogger('console')
class Test:
def __init__(self):
self._some_obj = True
self.print= logger.print
#main.py
vars(Test()) # Prints {'_some_obj':True,'print': <bound method Logger.printof <Logger console (PRINT)>>}
此方法仅正确打印出正确的属性,但会覆盖过程中的默认打印
#Test.py
logger = logging.getLogger('console')
class Test:
print = logger.print # Overwrites default print
def __init__(self):
self._some_obj = True
#main.py
vars(Test()) # Prints {'_some_obj':True}
这种方法也有效,但似乎不是很pythonic。由于我将对很多函数执行此操作,因此会占用大量空间,而且我在传递可选参数时也遇到了问题
#Test.py
logger = logging.getLogger('console')
class Test:
def __init__(self):
self._some_obj = True
def print(msg):
logger.print(msg)
#main.py
vars(Test()) # Prints {'_some_obj':True}
解决方案
推荐阅读
- java - 我需要检查每个已安装的应用程序并检查是否允许使用移动数据连接
- python - 解析 Redis MONITOR 消息
- microsoft-graph-api - Graph Explorer ErrorInvalidIdMalformed
- python - 在 Django 的外键中,即时类型更改为 int
- html - 如何根据宽度百分比设置高度 - 纯 CSS
- azure - 创建新的 API 管理服务实例后,为什么内置管理员帐户无法登录开发者门户批准注册的应用程序?
- node.js - 如何查询 mongodb 以比较对象数组?
- python - 如何在 StopIteration 之后继续创建生成器?
- azure - 为什么我的 Service Fabric 间应用程序服务 RPC 需要 2 分钟?
- javascript - 如何使用 jhipster 和 Angular 在选项中显示图片?