2024-04-26 17:46:46 发布
网友
我发现了同样的问题,但我的问题不同
def trace (): ? class A(): @staticmethod def Aha(): trace () ...
我要跟踪输出
A.Aha() was called
我知道如何通过检查得到函数名,并得到instance.method的类名,如下所示:
instance.method
但是类静态方法没有自变量,我该怎么办?在
您可以尝试为Aha创建包装器/装饰器。我建议您阅读this和{a2},如果您不知道装饰器是。在
Aha
下面这样的代码应该打印出函数名,然后调用函数。在
def wrapper(func): def inner(*args, **kwargs): print("function {0} has been called".format(func.__name__)) return func(*args, **kwargs) return inner @wrapper def f(): print "I'm in the function
退货
这正是静态方法的定义:它在没有类参数(如类方法)和实例参数(如实例方法)的情况下被调用。在模块范围内声明的函数与静态方法之间唯一的真正区别是方法名是在类的命名空间中定义的,而不是在模块的命名空间中定义的。在
换句话说,您不能直接访问类对象。您可以通过检查堆栈来获得函数名(尽管我不确定它有多有用):
>>> 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()
给定名称,您可以通过从名称中提取并在模块的名称空间中查找来获取类对象。。。在
供参考:
帧@-1:调用traceback.extract_堆栈() 帧@-2:调用trace() 帧@-3:调用A.A()
您可以尝试为
Aha
创建包装器/装饰器。我建议您阅读this和{a2},如果您不知道装饰器是。在下面这样的代码应该打印出函数名,然后调用函数。在
退货
^{pr2}$这正是静态方法的定义:它在没有类参数(如类方法)和实例参数(如实例方法)的情况下被调用。在模块范围内声明的函数与静态方法之间唯一的真正区别是方法名是在类的命名空间中定义的,而不是在模块的命名空间中定义的。在
换句话说,您不能直接访问类对象。您可以通过检查堆栈来获得函数名(尽管我不确定它有多有用):
给定名称,您可以通过从名称中提取并在模块的名称空间中查找来获取类对象。。。在
供参考:
帧@-1:调用traceback.extract_堆栈()
帧@-2:调用trace()
帧@-3:调用A.A()
相关问题 更多 >
编程相关推荐