オブジェクトが「リストっぽい」タイプではないかどうか、つまり、オブジェクトが反復可能でないかどうかをテストする方法を探しています (たとえば、文字列または単純なオブジェクトでiterを実行することもできます)。 iterを実装するオブジェクト) が、そのオブジェクトがリスト ファミリーに含まれていないこと。「 list 」ファミリーを list/tuple/set/frozenset、またはそれらから継承するものとして定義しますが、何かが欠けている可能性があるため、isinstance
すべてに対して実行するよりも一般的な方法を見つけたいと思いますそれらのタイプ。
私はそれを行うための2つの可能な方法を考えましたが、どちらも考えられるすべてのリストタイプに対して非常に多くのテストを行うため、やや厄介に思えます。私はより一般的な解決策を探しています.
最初のオプション:
return not isinstance( value, (frozenset, list, set, tuple,) )
2 番目のオプション:
return not hasattr(value, '__iter__')
__iter__
属性のテストは十分ですか? オブジェクトがリスト型でないかどうかを調べるより良い方法はありますか?
前もって感謝します。
編集:
( @Rosh Oxymoron のソリューションへのコメントから引用):
定義についてよりよく考えると、定義で配列型ではないすべてのものを見つける必要があると言う方が正しいと思いますが、それでも文字列/他の単純なオブジェクト...
に対してチェックすると、メソッドを実装するオブジェクトに対してTruecollections.Iterable
が返されます。__iter__