Python调用日志。获取基类名称

2 投票
1 回答
1823 浏览
提问于 2025-04-17 01:54

我有一段Python代码:

import inspect  
import logging  

logging.basicConfig(level=logging.DEBUG)  

class base_class:  
    def base_method(self):  
      logging.debug("  %s:%s() {" % (self.__class__.__name__, (inspect.stack()[0][3])))
      # . . .
      logging.debug("  } // %s:%s()" % (self.__class__.__name__, (inspect.stack()[0][3])))

class derived_class(base_class):
  def derived_method(self):
    logging.debug("%s:%s()." % (self.__class__.__name__, (inspect.stack()[0][3])))
    self.base_method()
    logging.debug("} // %s:%s()" % (self.__class__.__name__, (inspect.stack()[0][3])))

derived_class().derived_method()

它输出:

DEBUG:root:derived_class:derived_method().
DEBUG:root:  derived_class:base_method() {
DEBUG:root:  } // derived_class:base_method()
DEBUG:root:} // derived_class:derived_method()

我想要的是:

DEBUG:root:derived_class:derived_method().
DEBUG:root:  base_class:base_method() {
DEBUG:root:  } // base_class:base_method()
DEBUG:root:} // derived_class:derived_method()

这可能实现吗? 我花了好几个小时也没找到答案。

1 个回答

1

你这样做的原因可以争论,但我觉得最好的办法是手动指定类名。

class base_class(object):  
    def base_method(self):  
      logging.debug("  %s:%s() {" % ( base_class.__name__, (inspect.stack()[0][3])))
      # . . .
      logging.debug("  } // %s:%s()" % (base_class.__name__, (inspect.stack()[0][3])))

class derived_class(base_class):
  def derived_method(self):

      logging.debug("%s:%s()." % ( derived_class.__name__, (inspect.stack()[0][3])))
      self.base_method()
      logging.debug("} // %s:%s()" % ( derived_class.__name__, (inspect.stack()[0][3])))

撰写回答