Python:如何获取我所在函数的*full*名称

Jul*_*ULD 6 python inspect traceback

有没有办法让以下代码:

import traceback

def log(message):
    print "%s: %s" %(traceback.extract_stack()[0:-1][-1][2], message)

def f1():
    log("hello")

class cls(object):
    def f1(self):
        log("hi there")

f1()
mycls = cls()
mycls.f1()
Run Code Online (Sandbox Code Playgroud)

显示:

f1: hello
cls.f1: hi there
Run Code Online (Sandbox Code Playgroud)

代替:

f1: hello
f1: hi there
Run Code Online (Sandbox Code Playgroud)

我试图使用模块'inspect'但没有成功......

朱利安

编辑:

这里的要点是'log'函数能够自己检索其调用者名称(使用traceback,inspect或任何必要的平均值).

我不想将类名称或"消息"之外的任何内容传递给"日志"功能.

jmd*_*_dk -1

检查模块非常强大,可以traceback以与获取函数名称(可能还有类名称)类似的方式使用。但是您可以简单地利用self实例变量,它知道自己的类型/类:

import inspect

class cls(object):
    def f1(self):
        this_class_name = type(self).__name__
        this_func_name = inspect.currentframe().f_code.co_name
        print(this_class_name, this_func_name)

mycls = cls()
mycls.f1()
Run Code Online (Sandbox Code Playgroud)