【问题标题】:How to get the calling class name inside a function如何在函数中获取调用类名
【发布时间】:2015-11-13 22:32:58
【问题描述】:

我有 2 个类,其方法名为 pick_up_phone

class Work(object):

   def pick_up_phone(self):
       make_call()

class Home(object):

    def pick_up_phone(self):
       make_call()

函数make_call 不是该类的一部分。如何在不向该函数传递任何内容的情况下打印在函数本身内激发该函数的类的名称?

例如...

def make_call()
  print(????__.class__.__name__)???? <--- prints Home or Work class

【问题讨论】:

  • 奇怪的要求。为什么不让它成为超类的一部分,或者作为参数传入实例?
  • 这很奇怪,但是这个例子解释了我不控制调用类只控制函数的情况。我需要确定哪个类调用了我的函数。我知道如何使用self.__class__.__name__ 来实现这一点,但是,使用这个函数是行不通的。
  • @PeterWood 我看了那个答案,但我不明白它是如何关联的。也许我只是不明白给出的答案。

标签: python


【解决方案1】:

您可以从 traceback 模块获取调用堆栈(参见此处的示例 Print current call stack from a method in Python code),但正如 Daniel 所说,在大多数情况下这是非常糟糕的方法。

【讨论】:

    【解决方案2】:

    您可以使用inspect 模块:

    from inspect import getouterframes, currentframe
    
    
    def make_call():
        print getouterframes(currentframe())[-1][-2][0]
    
    
    class Work(object):
        def pick_up_phone(self):
            make_call()
    
    
    class Home(object):
        def pick_up_phone(self):
            make_call()
    
    
    Home().pick_up_phone()
    Work().pick_up_phone()
    

    输出:

    Home().pick_up_phone()
    
    Work().pick_up_phone()
    

    【讨论】:

      猜你喜欢
      • 2013-06-08
      • 2020-02-20
      • 2021-03-11
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多