gpt4 book ai didi

python - 如何通过检查获取类静态方法的类名

转载 作者:行者123 更新时间:2023-12-01 05:49:43 26 4
gpt4 key购买 nike

我发现了同样相似的问题,但我的问题不同

def trace ():
?

class A():
@staticmethod
def Aha():
trace ()
...

我想要跟踪输出

A.Aha() was called

我已经知道如何通过检查获取函数名,以及获取instance.method的类名,例如:

self_argument = frame.f_code.co_varnames[0]  # This *should* be 'self'.
instance = frame.f_locals[self_argument]
class_name = instance.__class__.__name__

但是类静态方法没有 self 参数,我该怎么办?

最佳答案

这就是静态方法的定义:在没有类参数(如在类方法中)和没有实例参数(如在实例方法中)的情况下调用它。在模块作用域中声明的函数和静态方法之间的唯一真正区别是方法名称是在类的命名空间中定义的,而不是在模块的命名空间中定义的。

换句话说,你无法直接获取类对象。您可以通过检查堆栈来获取函数名称(尽管我不确定它有多大用处):

>>> import sys
>>> import traceback
>>> class A(object):
@staticmethod
def a():
trace()
>>> def trace():
print traceback.extract_stack(sys._getframe())[-3][3]
>>> A.a()
A.a()

给定名称,您可以通过从名称中提取并在模块的 namespace 中查找来获取类对象...

供引用:

frame @ -1 :调用traceback.extract_stack()
框架@-2:调用trace()
帧@-3:调用A.a()

关于python - 如何通过检查获取类静态方法的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14786314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com