Skip to main content
 首页 » 编程设计

Python 调用记录。获取基类名称

2025年05月04日7tuyile006

我有一个 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() 

这可能吗? 我在几个小时内都没有找到答案。

请您参考如下方法:

你为什么这样做是可分割的,但我认为你最好的选择是手动指定类名

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])))