2015-10-27 106 views
2

我有一個程序,我試圖改變某個類的某個變量,這取決於程序中前面指定的那個變量。我想知道是否可以通過將變量名稱存儲在另一個變量中來指示要更改哪個變量,是否有可能?Python:我可以在變量中存儲變量名嗎?

實施例:

class Vars: 
    first = 0 
    second = 0 

variable_name = first 

Vars.variable_name += 1 

我想執行該代碼後Vars.first爲等於1,這是可能的?

+2

聽起來像一個XY的問題......你需要什麼用的? – RobertR

+0

可能的重複http://stackoverflow.com/questions/1373164/how-do-i-do-variable-variables-in-python。 – RobertR

+0

你爲什麼要這樣做? –

回答

2

是的,你可以使用getattr()/setattr()爲:

In [1]: class Vars: 
    ...:  first = 0 
    ...:  second = 0 
    ...: 

In [2]: variable_name = 'first' # You have to change it to string since we don't know anything 
           # about the `first` object outside of the class. 

In [3]: old_value = getattr(Vars, variable_name) 

In [4]: setattr(Vars, variable_name, old_value + 1) 

In [5]: Vars.first 
Out[5]: 1 

您還可以使用類__dict__對象,但是這是一個有點髒(和unpythonic)方式:

In [1]: class Vars: 
     first = 0 
     second = 0 
    ...: 

In [2]: Vars.first 
Out[2]: 0 

In [3]: variable_name = 'first' 

In [4]: Vars.__dict__[variable_name] += 1 

In [5]: Vars.first 
Out[5]: 1 

In [6]: Vars.__dict__[variable_name] += 1 

In [7]: Vars.first 
Out[7]: 2 
+0

感謝您的回覆。一個問題:爲什麼我不應該使用__dict__對象?我不應該使用任何可用的語言工具來解決我的問題嗎? – ZenenT

1

有一個名爲setattr的Python函數,用於在對象中設置屬性。

您可以將想要的變量名稱並改變它像下面的例子:

variable_name = "first" 
setattr(Vars,variable_name,1) 
相關問題