初始化类中的装饰变量

2024-09-30 02:28:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在一个类中使用一个可以接受变量的修饰符,我想在类中初始化该变量。在

下面是一个我目前正在使用的示例(目前正在使用)。在

_RETRIES = 3

class MyClass(object):
  def __init__(self, foo):
    self._foo=foo

  @retry.FuzzedIntervalsOnException(num_retries=_RETRIES)
  def my_method(self):
    return some_data

不过,我想将其更改为接受类似def __init__(self, foo, retries=3)的内容,以允许客户端决定重试次数。然而,实现这一点会抛出一个未定义的变量错误。在

我希望能得到下面这样的答案,但是正确的答案似乎比这个要复杂得多:

^{pr2}$

有没有一种理想的方法来初始化一个类变量以在装饰器中使用?在

非常感谢

编辑: 有关重试的其他信息,下面是初始化。在

class FuzzedIntervalsOnException(object):
   """Retry on exception 

   args:
     delay: Time delay in seconds for each retry.
     num_retries: Total number of retries.
   """
   def __init__(self, delay, num_retries):
     ...

Tags: 答案self示例objectfooinitdef修饰符
1条回答
网友
1楼 · 发布于 2024-09-30 02:28:24

您当前的retry可能如下所示:

def retry(num_retries=0):
    def decorator(fn):
        def wrapper(*args, **kwargs):
            # ...
        return wrapper
    return decorator

您想要得到self.retries,但是在调用wrapper之前,您不会有对self的引用。所以唯一的方法就是把self.retries放在wrapper里面。由于不向decorator传递任何参数,因此也可以删除层并执行以下操作:

^{pr2}$

相关问题 更多 >

    热门问题