问题描述
我只是想知道一个装饰器,它如何知道它正在装饰的函数是方法,函数,静态方法还是类方法?区分装饰器中这四种不同类型的最可靠方法是什么?
解决方法
这是使用 __qualname__
解决您的问题的代码片段:
def callable_type(callable):
what = type(callable).__name__
name = callable.__qualname__
if what == "function" and "." in name:
return "method"
elif what == "function":
return "function"
elif what == "type":
return "class"
这很笨拙,但在大多数情况下都有效。