如何测试装饰器在装饰方法或函数?

问题描述

我只是想知道一个装饰器,它如何知道它正在装饰的函数方法函数,静态方法还是类方法?区分装饰器中这四种不同类型的最可靠方法是什么?

解决方法

这是使用 __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"

这很笨拙,但在大多数情况下都有效。