• Python如何动态获取当前运行的类名和函数名
  • 发布于 1个月前
  • 68 热度
    0 评论
  • 乔治
  • 2 粉丝 6 篇博客
  •   
使用内置方法获取 python中获取函数名的情况分为内部、外部,从外部的情况好获取,使用指向函数的对象,然后用__name__属性
def a():
    print("hello")
print(a.__name__)
print(a.__getattribute__('__name__'))
print(getattr(a,'__name__'))
已经知道它的名字,还去获取。 尽管有些脱裤子放屁,总之,从外部获取的方法是非常灵活的。

我们用得多的是从内部获取,很多时候我们要debug,获取一些信息 从函数内部获取函数本身的名字,就需要用些技巧了。 

1.使用sys模块的方法:

import sysdef a():
    print(sys._getframe().f_code.co_name)
a()
f_code和co_name可以参考python源码解析的pyc生成和命名空间章节

还可以使用inspect模块动态获取当前运行的函数名
import inspectdef get_current_function_name():    return inspect.stack()[1][3]class MyClass:
    def function_one(self):
        print("%s.%s invoked" % (self.__class__.__name__, get_current_function_name()))if __name__ == "__main__":
    myclass = MyClass()
    myclass.function_one()
关键这些我都有点记不住。 我个人用得多的是用装饰器, 使用修饰器的方法: 使用修饰器就可以对函数指向一个变量,然后取变量对象的__name__方法。

我写的一个装饰器:
def get_name(func):
    def warper(*args,**kwargs):
        print("the function name is {}".format(func.__name__))
        result = func(*args,**kwargs)        return result    return warper@get_namedef my_name():
    print("hello")@get_namedef your_name(name):
    print("hello {}".format(name))
my_name()
your_name("xiao")
结果:
the function name is my_name
hello
the function name is your_name
hello xiao
简单却很管用。
用户评论