Pythonで型を確認するには?type・isinstance関数について解説

Pythonで型を調べる方法が知りたい
type・isinstance関数の使い方や違いについて知りたい

今回は、Pythonにおける基本的な型の調べ方について、やさしく解説していきたいと思います。プログラムを書いていると、変数などの型を調べる必要が出てきますよね。そんな時に知っていると重宝する関数をご紹介したいと思います。

  • 型とは
  • そもそも型とは
  • type関数、isinstance関数の使い方
  • type関数、isinstance関数の違いとは

など、型を調べる方法についてわかりやすく解説していきます。

※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。

Pythonにおける型とは

変数の型とは、その変数に格納されているデータのタイプの事です。例えば、数値が格納されているならint型、小数点が含まれているならfloat型、文字列ならstr型などがあります。

プログラムを書いていると、扱っている変数の型を調べなければいけない場面は多くあります。そのため、型を調べる方法を知っておくととても便利です。

type関数で型を調べる方法

ここでは、type関数の基礎や実際の使い方について解説していきます。

そもそもtype関数とは

型を調べる時は、基本的にはtypeという関数を使います。type関数は、引数に指定したオブジェクトの型を返します。以下のコードをご覧ください。

myvar = 1234
print(type(myvar))

出力結果は以下の通りです。

<type 'int'>

上記コードでは、int型の値1234を格納する変数myvarの型を調べてみました。type関数の引数に型を調べたい変数を当てはめるだけで、戻り値にその変数の型が返ってきます。ご覧いただけるように、int型と表示されました。

type関数の使い方

先ほどのサンプルコードで、type関数の基本的な使い方は理解いただけたと思います。では今度は、int型のみでなく色んなオブジェクトの型を調べてみましょう。以下のコードをご覧ください。

mystr = "Hello"
print(type(mystr))

出力結果は以下の通りです。

<type 'str'>

上記コードでは、変数mystrの型を調べてみました。ちゃんと、str型と判別されました。このような基本的なデータ型のみではなく、複数の要素で構成されるコンテナ型変数や、function(関数)などの型も調べる事が出来ます。

以下のコードをご覧ください。

mylist = [1,2,3,4]
mydict = {"one":1, "two":2, "three":3}
print(type(mylist))
print(type(mydict))

出力結果は以下の通りです。

<type 'list'>
<type 'dict'>

上記コードでは、リスト型オブジェクトmylistと辞書型オブジェクトmydictの型を調べてみました。このように、前者はlist、後者はdictと正しく判別されました。最後に、関数オブジェクトの型を調べてみましょう。

Pythonにおいて、関数はオブジェクトの一種なので、type関数で型を調べる事が出来ます。以下のコードをご覧ください。

def myfunc():
    return(0)

print(type(myfunc))

出力結果は以下の通りです。

<type 'function'>

上記コードでは、myfuncといった0を返すだけの関数を定義しました。myfuncの型をtype関数を用いて調べると、ご覧いただけるようにfunction型と表示されました。

isinstanceで型を調べる方法

Pythonにおいて変数の型を調べるのに、type関数とは別にもう一つ便利なisinstanceという関数が存在します。isinstance関数は引数を二つ要し、bool型を返します。

一つ目の引数は型を調べたい変数、二つ目はクラス名を指定します。ちなみに、クラスと型はPythonにおいて同義語として考えても良いです。isinstance関数は、第一引数に指定したオブジェクトが第二引数に指定したクラスであるかをbool型で返します。

以下のコードをご覧ください。

myvar = 1234
print(isinstance(myvar, int))

出力結果は以下の通りです。

True

上記コードでは、変数myvarがint型かどうかを調べてみました。ご覧いただけるように、myvarは1234を格納しているint型の変数なので、Trueと表示されました。

type関数とisinstance関数の違いとは

今まで紹介したtypeとisinstanceはどちらも型を調べるのに便利な関数です。オブジェクトのクラスを知りたい時はtype関数を、オブジェクトのクラスと指定したクラスが一致しているかを調べたい時は、isinstance関数を使用するのが良いでしょう。

特に、isinstanceは関数の引数などの適正さなどを判断したい時に使われます。引数の型によって挙動が変わる関数などもあるためです。予想外のエラーを引き起こさないためにも、isinstance関数で一度確認しておくことが大切です。

type関数とinstance関数には、引数や戻り値だけではなくもう一つ大きな違いがあります。isinstance関数は、第一引数のオブジェクトが第二引数として指定したクラスのインスタンスであるかをチェックします。

クラスが「型」であれば、インスタンスとはそのクラスを実体化したものです。つまり、int型の変数myvarの場合、intというクラスが「型」でmyvarがそのインスタンスです。

isinstance関数は、二つの引数がオブジェクトと所属クラス、または所属クラスの継承元クラスの両方の場合にも True を返す点です。以下のコードをご覧ください。

class mysuperclass(object):
    pass
class myclass(mysuperclass):
    pass


myinstance = myclass()


print(type(myinstance))

print(isinstance(myinstance, myclass))
print(isinstance(myinstance, mysuperclass))
<class '__main__.myclass'>
True
True

上記コードでは、myclassといったクラスと、そのスーパークラスにあたるmysuperclassを作成しました。myclassのインスタンスを作成しtype関数で型をチェックすると、myclass型であることが分かりました。

一方、isinstance関数を使用すると、myclassのインスタンスはmysuperclassが第二引数に指定されていてもTrueを返しました。このように、type関数は継承関係を考慮しないので、場合によってisinstance関数と使い分けるのが良いでしょう。

まとめ

今回はPythonにおける基本的な型の調べ方をご紹介しました。type関数に加え、isinstance関数なども知っておくと使い分ける事が出来るので便利です。本記事を通して、ご自身でも試して理解を深めてくださいね。

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

Kotono

Kotono

イタリア在住15年目の22歳です。イタリアの大学で情報科学&応用数学を学んでいます。主にJavaScriptやPythonについての記事を書いたりしています。