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で本当に大丈夫?

ここまでPythonにおける基本的な型の調べ方などを解説してきましたが、この記事をご覧の方の中には、

このままでPythonを習得できるのだろうか..?

と不安になっている人もいるのではないでしょうか?そんな方には、一度立ち止まって考えて欲しいことがあります。それは、そもそもあなたがPythonを学ぶ目的は何か?本当に学ぶべき言語はPythonで間違いないか?ということです。

Pythonを学ぶ目的や理由は明確ですか?

Pythonに限った話ではありませんが、プログラミング学習はエラーとの戦いが大半なので、学ぶ目的や理由が不明確だとモチベーションが下がってしまい、挫折してしまいやすいです。

なのでもしあなたが今、

  • なんとなくPythonが人気そうだから
  • Pythonは将来性がありそうだから

といったような、ぼんやりした理由でPythonを学んでいるとしたら、それは要注意。もっと言うと、そもそもあなたが学ぶべき最適な言語が他にあるという可能性も考えられます。

どのプログラミング言語を学ぶか?はその先のエンジニア人生を左右すると言っても過言ではありません。もしあなたが言語選定に少しでも不安があるなら、まずはプログラミング言語無料診断アプリを使ってみてください。

いくつかの簡単な質問に答えるだけで、あなたにぴったりの言語や学習プランを1分ほどで無料診断致します。

挫折せずに学びたいなら

また、学ぶべき言語はPythonで間違っていないけど、エラーとの戦いに消耗している方や、Python学習に最適な学習環境を作れていない人もいるかもしれません。

というのも、一般的にPythonは初心者でも学びやすい言語と言われていますが、そもそも機械学習という分野は、プログラミング以外にも専門的な知識や数学の知識も必要になってくるので、実は想像以上に挫折しやすい言語でもあるのです。

なのでやはり、つまずいた時に分からない部分を聞ける環境を作っておくと、挫折する事なく学習を続けられスキルを習得できる可能性がグッと上がります。

もしあなたが今Pythonの独学に少しでも不安を抱いているのであれば、ぜひ弊社「侍エンジニア塾」をご利用ください。

弊社では機械学習専門コースを用意しており、現役エンジニアがマンツーマンであなたの学習をサポートします。また、転職支援や独立・起業サポートもしているので、学習した先も安心ですよ。

もちろん、いきなり入会するのは不安な人も多いと思います。そこで、興味がある人はまず無料体験レッスンを利用してみてください。弊社随一のコンサルタントが、あなたの理想や目標をヒアリングした上で、あなたにぴったりの学習プランを提供させて頂きます。

無料体験は下記ボタンから1分ほどで予約できるので、ぜひお気軽にご利用ください。オンラインでの利用も可能となっています。

侍エンジニア塾
無料体験レッスンの予約はこちら

まとめ

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

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

Kotono

Kotono

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説