2012-10-09 7 views
2

Python 3을 배우고 Java에서 Python 3.3으로 일부 코드를 변환하는 동안 해결할 수 없었던 작은 문제가 발생했습니다. 자바에서
내가 (이 작게 그냥 더미 코드)이 코드를 가지고 :Python 3.x : Python 3.x에서 Java valueOf()와 동일합니다.

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' 가 작동하지 않는 파이썬에서이 작업을 수행하려고 그렇게 쉬운 일이 (아직) .

class Mapping: 
    C11=1 
    C12=2 

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

불행하게도 내가 어떻게 속성에 문자열을 변환하는 (또는 그 비슷한 것)처럼 호출 할 아무 생각이 : 내가 가진 열거를 모방하려고 노력했다. 클래스 매핑에 엄청난 목록이 있고 텍스트 파일에서 읽은 무작위 단어를 정수 매핑으로 변환해야하기 때문에이 코드가 필요합니다.

+1

[파이썬은 자바 아니다] 읽어 보시기 바랍니다 (http://dirtsimple.org/2004/12/python-is-not-java.html), 너무 많이하지 이 특정 질문 때문에,하지만 당신과 당신이 그것을 묻는 방식으로 당신은 여전히 ​​대부분 자바를 생각하고 있음을 나타냅니다. – 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