3.1+の場合、次のいずれかです。
isinstance(something, io.TextIOBase)
isinstance(something, io.BufferedIOBase)
isinstance(something, io.RawIOBase)
isinstance(something, io.IOBase)
2.xの場合、「ファイルのようなオブジェクト」はチェックするのが漠然としすぎていますが、処理している関数のドキュメントで、実際に必要なものを説明できれば幸いです。そうでない場合は、コードを読んでください。
他の回答が指摘するように、最初に尋ねるべきことは、正確に何をチェックしているかです。通常、EAFPで十分であり、より慣用的です。
用語集では、「ファイルのようなオブジェクト」は「ファイルオブジェクト」の同義語であり、最終的には、モジュールで定義された 3つの抽象基本クラスのいずれかのインスタンスであり、それ自体がすべてのサブクラスであると述べています。したがって、確認方法は上記とまったく同じです。ioIOBase
(ただし、チェックIOBaseはあまり役に立ちません。テキストファイルとrawを区別する必要なしに、実際のファイルのようにread(size)、ファイルのように名前が付けられreadていない1つの引数を持つ関数と区別する必要がある場合を想像できますか。バイナリファイルですか?つまり、実際には、ほとんどの場合、たとえば、「ファイルのようなオブジェクトであるか」ではなく、「テキストファイルオブジェクトであるか」を確認する必要があります。
2.xの場合、ioモジュールは2.6以降で存在しますが、組み込みファイルオブジェクトはioクラスのインスタンスではなく、stdlibのファイル類似オブジェクトでも、サードパーティのファイル類似オブジェクトでもありません。出会う可能性が高いです。「ファイルのようなオブジェクト」が何を意味するかについての公式の定義はありませんでした。それは単に「組み込みファイルオブジェクトのようなもの」であり、関数が異なると「好き」によって意味が異なります。このような関数は、それらの意味を文書化する必要があります。そうでない場合は、コードを確認する必要があります。
ただし、最も一般的な意味は「has read(size)」、「has read()」、または「is itableable of strings」ですが、一部の古いライブラリreadlineはそれらのいずれかではなく予期する場合があり、一部のライブラリは指定したclose()ファイルに似ています。filenoが存在する場合は、他の機能を利用できます。同様にwrite(buf)(その方向にははるかに少ないオプションがあります)。
whyなどの演算子__add__、__lshift__または__or__カスタムクラスではどうですか?(ファイルオブジェクトおよびAPI:docs.python.org/glossary.html#term-file-object)