PR

【Python】型判定:type関数とisinstance関数を3分でわかりやすく解説

Python

Pythonではオブジェクトのデータ型を判定するためにはPythonの組み込み関数を利用するのが一般的です。

参考 関数とは?

このページでは、その中でも主要な関数であるtype関数/isinstance関数の使い方・使い分けをわかりやすく解説します。

ポイント1 type()関数

Pythonのtype()関数は、指定したオブジェクトの型を返します。これを使用すると、オブジェクトがどのデータ型に属するかを調べることができます。

num = 123
print(type(num))  # <class 'int'>

str_var = "Hello, Python!"
print(type(str_var))  # <class 'str'>

list_var = [1, 2, 3, 4, 5]
print(type(list_var))  # <class 'list'>

ポイント2 isinstance()関数

isinstance()関数は、指定したオブジェクトが指定した型に属しているかどうかを判定します。これは特定の型が期待される場合に便利です。

num = 123
print(isinstance(num, int))  # True

str_var = "Hello, Python!"
print(isinstance(str_var, str))  # True

list_var = [1, 2, 3, 4, 5]
print(isinstance(list_var, list))  # True
このページで学べる内容
  • Pythonにおけるデータ型判定・確認の必要性
  • type関数の使い方
  • isinstance関数の使い方
  • type関数/isinstance関数の使い分け

Pythonエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください

スポンサーリンク

前提:データ型を判定する必要性

プログラミングにおけるデータ型の判定は、以下のような理由から重要な役割を果たします。

プログラミングにまだ慣れていない人は見過ごしがちな点ですが、この点をしっかり理解しておかないと後から必ず痛い目にあいます・・・。ので、確実に頭に入れておきましょう。

  • エラーの予防: データ型の不適切な使用はエラーを引き起こす可能性があります。例えば、文字列を整数として扱おうとするとエラーが発生します。データ型をチェックすることで、このようなエラーを防ぐことができます。
a = "123"
b = 456
# c = a + b  # TypeError: can only concatenate str (not "int") to str
  • 適切な操作の実施: データ型によって、そのデータに対して実行できる操作が異なります。例えば、リストに対しては要素の追加や削除、文字列に対しては連結や置換などの操作が可能です。データ型を判定することで、適切な操作を選択できます。
  • コードの堅牢性: データ型のチェックは、関数やメソッドが期待通りのデータ型を受け取っていることを確認するために重要です。これにより、コードの堅牢性を高め、未予期のエラーやバグを防ぐことができます。
  • 型依存のロジックの実行: データ型によって実行されるロジックを切り替えることがしばしばあります。例えば、関数が整数と文字列の両方を引数として受け取り、それぞれに異なる処理を適用する場合などです。このような場合、データ型のチェックは必須です。

以上のような理由から、プログラミングにおけるデータ型の判定は重要な概念であり、プログラムが正しく、効率的に動作するための基礎となります。

Pythonではデータ型の判定・確認を行う際にはtype関数isinstance関数を利用します。ここからはサンプルコード付きで具体的に2つの関数の利用方法をわかりやすくご説明します。

参考 Pythonのデータ構造(リストとは?)

Python:type関数

Pythonのtype()関数は、引数として渡されたオブジェクトのデータ型を返します。

type関数:構文ルール

type(オブジェクト)

データ型判定をしたいオブジェクトを引数に指定するだけ。

num = 123
print(type(num))  # <class 'int'>

str_var = "Hello, Python!"
print(type(str_var))  # <class 'str'>

list_var = [1, 2, 3, 4, 5]
print(type(list_var))  # <class 'list'>

参考 print関数

以上のサンプルコードでは、type()関数を用いてそれぞれのオブジェクトの型を確認しています。

注意点としては、type()関数が返すのは型そのものです。つまり、返された型を文字列として扱いたい場合には、str()関数を用いて変換する必要があるという点に注意しましょう。

参考 str関数の使い方

使い方のコツ
  • デバッグ中に、変数の型を素早く確認するために使用。特に大きなプログラムや複雑なデータ構造の中で作業している場合、型の混乱は大きな問題となるためtype関数が活躍します。
  • 動的に生成されるデータの型をチェックする際にも便利です。これはWeb APIから取得したJSONデータなど、データ形式が確定していない場合に特に有用。
  • より高度な使用例として、type()関数はメタクラス(クラスのクラス)を作成するためにも使用されます。メタクラスはPythonの高度なオブジェクト指向プログラミングにおいて使用されます。

以上が、Pythonのtype()関数の基本的な説明と使用法。type()関数はPythonプログラミングの基本的な部分であり、頻繁に使用されるため、必ず頭に入れておきましょう!

Python:isinstance関数

isinstance()関数は、指定したオブジェクトが指定した型に属しているかどうかを判定します。これは特定の型が期待される場合や、あるオブジェクトが特定のクラスのインスタンスであるかどうかを調べるために使用されます。

isinstance関数:構文ルール

isinstnace(オブジェクト,クラス)

isinstance関数は 1 番目の引数に指定したオブジェクトが 2 番目の引数に指定したデータ型と等しいかどうかを判定します。

num = 123
print(isinstance(num, int))  # True

str_var = "Hello, Python!"
print(isinstance(str_var, str))  # True

list_var = [1, 2, 3, 4, 5]
print(isinstance(list_var, list))  # True

以上のサンプルコードでは、isinstance()関数を用いてそれぞれのオブジェクトが指定した型に属しているかを確認しています。

注意点としては、2つ目の引数にはタプルを指定することができ、その場合、objectがタプル内のいずれかの型に属しているかどうかを判定します。

これは、複数の型を許容する場合に便利です。

num = 123
print(isinstance(num, (int, float)))  # True

この例では、numが整数または浮動小数点数のいずれかであればTrueを返します。

isinstance()関数はプログラムが正しく動作するための重要なツールであり、型安全を確保するために広く使用されます。

type関数とisinstance関数の相違点

type()関数とisinstance()関数はどちらもPythonでオブジェクトのデータ型を調べるために使用されますが、その使い方と結果が異なる点があります。

相違点1:継承の取り扱い

type()関数とisinstance()関数の主な違いは、クラスの継承をどのように扱うかです。

type()関数は、オブジェクトの厳密な型を返します。つまり、オブジェクトが特定のクラスのサブクラスのインスタンスであっても、そのスーパークラスの型とは見なされません。一方、isinstance()関数は、オブジェクトが指定されたクラスまたはそのサブクラスのインスタンスである場合、Trueを返します。

class Parent:
    pass

class Child(Parent):
    pass

child = Child()

print(type(child) == Parent)  # False
print(isinstance(child, Parent))  # True

参考 クラスとは?

このコードでは、childオブジェクトはChildクラスのインスタンスであり、このクラスはParentクラスを継承しています。

しかし、type(child) == ParentFalseを返し、isinstance(child, Parent)Trueを返します。つまり、isinstance()は継承を考慮に入れる一方で、type()はそうではありません。

相違点2:複数の型の確認

isinstance()関数は、第二引数にタプルを取ることができ、その場合、オブジェクトがタプルに含まれるいずれかの型であるかどうかを確認します。一方、type()関数はこのような機能を持っていません。

num = 123
print(isinstance(num, (int, float)))  # True

このコードでは、numintまたはfloatのいずれかであるかを確認します。このような操作はtype()関数では行えません。

これらの違いを踏まえつつ、どちらの関数を使うべきか、利用するシーンや目的に応じて適切に選択する必要がある点を押さえておきましょう。

Python:データ型判定のまとめ

  • データ型の判定はエラー予防、適切な操作の実施、コードの堅牢性の保証、型依存のロジックの実行に重要。
  • type()関数は、引数として渡されたオブジェクトのデータ型を返します。これは主にデータ型の確認やデバッグに使用される。
  • isinstance()関数は、指定したオブジェクトが指定した型に属しているかどうかを判定。特定の型の引数が期待される関数や、型に応じた操作を行う場合などに使われる。
  • type()isinstance()の違いは、クラスの継承の扱い方と複数の型の確認方法にあります。type()はオブジェクトの厳密な型を返し、継承を考慮しない。一方、isinstance()は、オブジェクトが指定されたクラスまたはそのサブクラスのインスタンスである場合、Trueを返す。

始めてPythonを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。

Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!

読者料典 Python入門:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
Python
シェアする
ビズドットオンラインをフォローする
blank
ビズドットオンライン
タイトルとURLをコピーしました