7

파이썬에서는 일반적으로 타입 변환을 수행하기 위해 str(), int(), float() 등과 같은 함수가 사용됩니다. 그러나이를 위해서는 개발시에 어떤 유형으로 변환 할 것인지 알 필요가 있습니다. 두 개의 변수, foobar을 감안할 때파이썬 리플렉션 및 타입 변환

foo의 유형을 찾아 다음과 같이 내가 쓰기 위해 노력하고있어 일부 파이썬 코드의 하위 문제입니다. (이것은 개발시 알려지지 않습니다. 일반 코드이므로) barfoo으로 변환하십시오. 이 작업을 수행 할 수 없으면 예외를 throw합니다.

예를 들어, 이것을 수행하는 함수를 호출한다고 가정 해 보겠습니다. conv.

result = conv(3.14, "2.718") # result is now 2.718, as a float. 

답변

11

사용 foo.__class__foo의 유형을 얻을 : 그것의 서명 그것은 뭔가를 호출 할 것이다

def conv(foo, bar) : 
    # Do stuff. 

과 같을 것이다. 그런 다음 foo는 유형에 줄을 변환하기 위해 호출 : 물론

def conv(foo, bar) : 
    return foo.__class__(bar) 

, foo의 유형이 줄을 변환하는 방법을 알고있는 생성자가있을 경우에만 작동합니다. 가장 좋은 것입니다

+0

인상적입니다. 믿을 수 없을 정도로 쉬울 것이라고는 생각하지 못했을 것입니다. 또한 놀랍습니다 (저는 Python을 처음 사용하고 금속 언어에 더 익숙해졌습니다)는 내장 함수와 함께 작동한다는 것입니다. – dsimcha

+0

부분적으로 올바르지 않습니다. foo .__ class__는 foo가 새로운 스타일의 객체 인 경우에만 foo의 유형입니다. 그렇지 않으면 클래스 일뿐입니다. –

+0

클래스가 더 정확할 때만 '입력'이라고 말한 것이 틀림 없습니다. 그러나 그는이 회심을위한 반을 필요로합니다. 그리고 파이썬 3에서는 그 차이가 사라졌습니다. – oefe

16

: 당신이 유형을 확인하려면

type(foo)(bar) 
+0

파이썬 3.0에서만. Python 2.x에서는 "new-style classes"와 builtins에서만 작동합니다. – oefe

0
type(foo) 

는 "유형"가장 좋은 방법이며, 확실히 최고입니다, 나는 완벽 python 2.7 - 3.2.2, type() 작품에입니다.