2011-03-13 103 views
5

我有一個班有十個不同的計數器。我需要在運行時增加一個或另一個,並且增量方法會告訴計數器的名稱增加。如何在運行時使用getattr/setattr增加屬性?

我不知道是否有比這更清潔的方式:

def increment(self, name): 
    """Increments a counter specified by the 'name' argument.""" 
    setattr(self, name, getattr(self, name) + 1) 
  • 我並不十分擔心競爭條件等。
  • 不,你不能改變函數的調用方式。顯然,真正的代碼比例子稍微微不足道。
+0

是否有可能有一個櫃檯名稱字典? – 2011-03-13 12:17:31

+0

正如在下面的回答評論中指出的那樣 - 不,你沒有專櫃字典。 – 2011-03-13 12:45:35

回答

6

您可以將計數器存儲在字典中而不是屬性中。

或者,你可以使用

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

它是由你來決定,如果這是「乾淨」。

+0

我無法改變計數器的存儲方式;他們是django模型中的字段。雖然'__dict__'技巧很好。 – 2011-03-13 12:28:19

+0

當然,讓' .__ dict__' *中的計數器將它們存儲在字典中。 – martineau 2011-03-13 19:40:46

+0

嗯,觸摸'__dict__'感覺很髒,但這聽起來像是在這種情況下get/setattr的唯一選擇。還是)感謝你的建議! – 2011-03-14 00:18:21

相關問題