isinstance
必要に応じて使用してください。カスタムシーケンス、イテレータなど、実際に必要となる可能性があるものを除外しているため、多少悪です。ただし、たとえば、文字列を渡す人がいる場合は、別の動作が必要になることがあります。私の好みは明示的にチェックするstr
かunicode
、そうすることです:
import types
isinstance(var, types.StringTypes)
NBドゥ間違えないtypes.StringType
ためにtypes.StringTypes
。後者はstr
およびunicode
オブジェクトを組み込みます。
types
モジュールはあなたではなく、上記を使用していないと思いますので、もし、あなたが代わりに対して明示的に確認することができ、単にオブジェクトの型に対して直接確認するのに有利で時代遅れであることを多くの人に考えられているstr
とunicode
、このように、:
isinstance(var, (str, unicode)):
編集:
まだ良いです:
isinstance(var, basestring)
編集を終了
これらのいずれかの後、通常のシーケンスを取得しているかのように動作にフォールバックし、非シーケンスが適切な例外を発生させるようにすることができます。
型チェックについて「悪い」ことは、特定の種類のオブジェクトに対して異なる動作をしたいということではありません。本来なら正しいことをするはずの予期しないオブジェクト型を使用して、関数が正しいことを行うことを人工的に制限するということです。タイプチェックされていない最終的なフォールバックがある場合は、この制限を削除します。型チェックが多すぎると、何らかのリファクタリングが必要になる可能性があることを示すコードの匂いになりますが、必ずしもgetgoからそれを回避する必要があるわけではありません。