2013-06-06 13 views
7

우리는 함수, 문자열, 컴파일 된 정규 표현식, Hamcrest Matcher과 같이 다양한 유형의 입력을 받아들이고 입력 유형에 따라 목록을 적절하게 필터링하는 함수를 가지고 있습니다.후보자를 가져 오지 않고 isinstance

현재 우리는 isinstance(our_filter, hamcrest.matcher.Matcher)을 사용하고 있습니다. 그러나 Hamcrest를 설치해야합니다.

inspect.getmro(type(POSSIBLE_MATCHER))에서 문자열 일치 사용을 고려하고 있습니다. 그러나 이것은 부정하다고 느낍니다. import 문 주변에 try/except 옵션이있을 수도 있습니다.

가장 좋은 방법은 무엇입니까?

[x.__module__+"."+x.__name__ for x in inspect.getmro(type(POSSIBLE_MATCHER))] ['hamcrest.core.core.isequal.IsEqual', 'hamcrest.core.base_matcher.BaseMatcher', 'hamcrest.core.matcher.Matcher', 'hamcrest.core.selfdescribing.SelfDescribing', '__builtin__.object']

+0

비슷한 문제가있어서'if str (data .__ class__) == ' :'....'모듈 가져 오기가 필요하기 때문에 try/catch를 사용하지 않을 것입니다. 첫 번째 사용에서는 입력이 다른 유형이므로 입력 된 모듈이 실제로 필요 없다는 사실을 마침내 발견하면 어떤 경우에는 성가신 지연을 유발할 수 있고 물론 메모리가 필요합니다. –

답변

8

type(POSSIBLE_MATCHER).__name__가 이럴 필요없이 유형 검사에 대한 매우 우아한 솔루션을 사용 : @dblslash의 도움으로


, 이것은 내가 지금까지있어 최고입니다 모듈을 가져옵니다.