重试通常与装饰器一起使用,例如如下元代码所示:
class FooBar:
@retry(attempts=3)
def dosomething():
...
我希望重试参数可以在类上配置
class FooBar:
def __init__(retries=0):
self.retries = retries
@retry(attempts=self.retries)
def dosomething():
...
显然这会中断,因为装饰器无法访问对象属性(即无法访问self
)。所以认为这会起作用:
def dosomething():
with retry(attempts=self.retries):
...
但是这两个库都不允许在with
块中调用重试
> with retry():
E AttributeError: __enter__
用动态参数包装重试逻辑的首选方法是什么?