我知道有一个与此问题相关的帖子。但是我想的不是那个职位。所以我想知道是否只有一种方法可以解决?或者存在多种方式。
我不确定这篇文章的标题是否有意义。但是我遇到了一个问题,我想用内置方法创建许多装饰器函数。含义如下:
@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)查找所有相关方法,但是有没有一种方法可以自动执行此过程而无需显式写出所有方法?谢谢。
答案 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()
...