변수를 받아 들일 수있는 클래스 내에서 데코레이터로 작업 중이며 클래스 내에서 변수를 초기화하고 싶습니다.Decorator Variable in Class
다음은 현재 작업하고있는 작업의 예입니다 (현재 작동 중입니다).
_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)
같은 것을 받아이를 변경하고 싶습니다. 그러나이를 구현하면 정의되지 않은 변수 오류가 발생합니다. 사용되는 클래스 변수를 초기화 할 수있는 이상적인 방법이 있나요
class MyClass(object):
def __init__(self, foo, retries=3):
self._foo=foo
self.retries=retries
@retry.FuzzedIntervalsOnException(num_retries=self.retries)
def my_method(self):
return some_data
: 나는 다음과 같은에 도착 바라고
그러나 정답이보다 더 복잡 할 것 같아 데코레이터 안에서? 사전
편집에
많은 감사 : 재시도에 대한 자세한 내용은 , 아래의 초기화이다.
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):
...
당신은 그것을 받아들이는 대신'자체에서 num_retries'를 얻기 위해 재시도 장식을 변경할 수 있습니다 외침? –
데코레이터 호출에서'self.retries'를 참조 할 수 없습니다. 왜냐하면 클래스 정의시 발생하기 때문입니다. 그러나 클래스를 인스턴스화 할 때까지'self'가 없습니다. 그러나'num_retries'가 주어지지 않으면 데코 레이팅 된 함수가 호출 될 때'self'를 보도록'retry'라고 쓸 수 있습니다. '재 시도'자체의 구현에 대한 (가능한 한 개략적 인) 데모를 줄 수 있습니까? 지금은'재시도'가 실제로 어떻게 작동하는지 아무 것도 보여주지 않습니다. – BrenBarn
아, 재미 있습니다. 네, 그게 정확히 제가 실행하고있는 것 같아요이 두 솔루션 중 하나가 작동 것 같습니다. 다시 묻는 질문에 재시도 구현에 대한 추가 정보를 추가하겠습니다 ..... – Seano314