与えられたオブジェクトが与えられた型であるかどうかを調べるには、どのような方法がありますか?オブジェクトが与えられた型を継承しているかどうかを調べるのはどうでしょうか?
例えば、o
というオブジェクトがあるとします。それが str
であるかどうかを調べるにはどうしたらよいでしょうか。
oが
strまたは
str`のサブクラスのインスタンスであるかどうかを確認するには、isinstanceを使用します(これは"canonical"の方法になります)。
if isinstance(o, str):
oの型が正確に
str` であるかどうかをチェックします (サブクラスは除外します)。
if type(o) is str:
次のようにしても動作しますし、場合によっては役に立つこともあります。
if issubclass(type(o), str):
関連する情報は、Python ライブラリリファレンスの Built-in Functions を参照してください。
もう1つの注意点として、この場合、python2を使用しているのであれば、実際に使用するのは
if isinstance(o, basestring):
なぜなら、これは Unicode 文字列もキャッチするからです (unicode
は str
のサブクラスではありません。str
と unicode
は共に basestring
のサブクラスです)。なお、python3では basestring
はもはや存在せず、文字列 (str`) とバイナリデータ (bytes`) が 厳密に分離 されています。
代わりに、isinstance
はクラスのタプルを受け取ります。これは、xが(str, unicode)のいずれかのサブクラスのインスタンスであれば、Trueを返します。
if isinstance(o, (str, unicode)):
isinstance(o, str)