2011-03-13 7 views
5

10 개의 카운터가있는 클래스가 있습니다. 런타임에 이들 중 하나 또는 둘 다를 증가시켜야하고 increment 메소드는 증가 할 카운터의 이름을 알려줍니다.getattr/setattr을 사용하여 런타임에 속성을 증가시키는 방법은 무엇입니까?

이보다 깨끗한 방법이 있는지 궁금 해요 :

def increment(self, name): 
    """Increments a counter specified by the 'name' argument.""" 
    setattr(self, name, getattr(self, name) + 1) 
  • 나는 경쟁 조건 등에 대해 몹시 걱정하지 않아요.
  • 아니요, 함수 호출 방식을 변경할 수 없습니다. 분명히, 실제 코드는 예제보다 조금 덜 사소합니다.
+0

카운터에 이름 사전을 포함 할 수 있습니까? –

+0

아래 답변에 대한 의견에서 언급했듯이 - 아니요, 카운터 사전은 없습니다. –

답변

6

속성 대신 카운터에 카운터를 저장할 수 있습니다.

또는이는 "청소기"입니다 여부를 결정하는 그것은 당신에게 달려

def increment(self, name): 
    """Increments a counter specified by the 'name' argument.""" 
    self.__dict__[name] += 1 

를 사용할 수 있습니다.

+0

카운터 저장 방법을 변경할 수 없습니다. 그들은 장고 모델의 필드입니다. 그래도 __dict__ 트릭은 훌륭합니다. –

+0

물론 ' .__ dict__' *의 카운터를 사전에 저장하는 것입니다. – martineau

+0

글쎄,'__dict__'을 만지면 오히려 더러워 지겠지만,이 경우에는/setattr을 얻는 유일한 방법 인 것 같습니다. 그래도 제안을 주셔서 감사합니다! –

관련 문제