首页 > 解决方案 > 使用来自另一个模块的特定方法扩展类

问题描述

我正在尝试使用“日志记录”模块中包含的一些输出函数来扩展我的自定义类“测试”。我有一个名为“打印”的自定义日志记录级别,这导致了我的问题。我尝试了多种方法,每种方法都有一些缺点。有没有其他比我想念的更好的方法。

我希望能够在对象上使用 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}

标签: pythonpython-3.x

解决方案


推荐阅读