2013-06-06 10 views
7

関数、文字列、コンパイルされた正規表現、Hamcrest Matcherのさまざまな種類の入力を受け取り、入力のタイプに基づいてリストを適切にフィルタリングする関数があります。候補をインポートしないisinstance

現在、isinstance(our_filter, hamcrest.matcher.Matcher)を使用していますが、これにはHamcrestのインストールが必要です。

inspect.getmro(type(POSSIBLE_MATCHER))で文字列の一致を使用することを検討しています。しかし、これは汚れているように感じます。 import文の前後には、try/exceptのオプションもあります。

どのような方法が最適ですか? @dblslashからの助けを借りて


、これは私がこれまで持っている最高のされています

[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__を使用するには、私見ことなく、型チェックのためにかなりエレガントなソリューションです。モジュールをインポートします。

関連する問題