2012-10-09 62 views
2

Whilest學習Python 3中和一些從Java我的代碼轉換到Python 3.3我遇到了一個小問題,我一直沒能解決。
在Java中我有這樣的代碼(只是虛擬的代碼,使之更小):的Python 3.X:Java的的valueOf(),相當於在Python 3.x的

public enum Mapping { 
    C11{public int getMapping(){ return 1;}}, 
    C12{public int getMapping(){ return 2;}}, 
    public abstract int getMapping(); 
} 

String s = "C11"; 
System.out.println(Mapping.valueOf(s)) 

工作正常,並打印requisted「1」 試圖做到這一點在Python不工作那麼容易(還) 。我試圖模仿枚舉有:

class Mapping: 
    C11=1 
    C12=2 

s = 'C11' 
print(Mapping.Mapping.(magic should happen here).s) 

不幸的是我不知道如何將一個字符串轉換爲一個屬性被稱爲類似的(或類似的東西)。 我需要這個,因爲我在類映射中有一個巨大的列表,並且需要將從文本文件讀取的看似隨機的單詞轉換爲整型映射。

+1

請仔細閱讀[Python是不是Java(http://dirtsimple.org/2004/12/python-is-not-java.html),與其說由於這個具體問題,但因爲它和他們的方式,你問它表明你仍然主要思考用Java術語。 – delnan

+0

我會這樣做,謝謝你的提示! – Tim

回答

2

您正在尋找getattr

>>> getattr(Mapping, s) 
1 

從文檔:

GETATTR(對象名稱[,默認值])的命名

返回值屬性對象名稱必須是字符串。如果字符串是對象屬性之一的名稱,則結果是該屬性的值。例如,getattr(x, 'foobar')相當於x.foobar。如果指定的屬性不存在,則提供默認(如果提供),否則引發AttributeError

+0

完美,完全符合我的需求,謝謝! – Tim

1

使用getattr

class Mapping: 
    C11=1 
    C12=2 

print(getattr(Mapping, 'C11')) # prints 1