使用内置方法自动生成许多装饰器功能

时间:2018-08-04 20:48:15

标签: python automated-tests decorator

我知道有一个与此问题相关的帖子。但是我想的不是那个职位。所以我想知道是否只有一种方法可以解决?或者存在多种方式。

我不确定这篇文章的标题是否有意义。但是我遇到了一个问题,我想用内置方法创建许多装饰器函数。含义如下:

@some_decorator_fcn
def function_1(data):
    return data.method_1()

@some_decorator_fcn
def function_2(data):
    return data.method_2()

@some_decorator_fcn
def function_3(data):
    return data.method_3()

......
......

因此,基本上,我需要尽可能多的方法。我知道我们可以使用dir(data)查找所有相关方法,但是有没有一种方法可以自动执行此过程而无需显式写出所有方法?谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将函数包装到类中,并编写另一个装饰器来装饰所有函数。因此,此装饰器看起来像(也许您需要排除__init__之类的魔术方法,如果需要,可以这样做):

def wrap_all_methods(decorator):
    def wrapper(cls):
        for attr in cls.__dict__: # iterate over all attributes
            if callable(getattr(cls, attr)): # if attribute is a function
                setattr(cls, attr, decorator(getattr(cls, attr))) # decorate this function
        return cls
    return wrapper

然后使用您的函数创建类:

@wrap_all_methods(some_decorator_fcn)
class Functions:
    def function_1(data):
        return data.method_1()
    def function_2(data):
        return data.method_2()
    ...