Pythonは動的型付け言語であるため、変数を宣言する際に型を指定する必要がありません。
しかし、開発が進むにつれて「この変数には今、何が入っているのか?」を確認したくなる場面や、「数値なら計算、文字列なら結合」といったように、型に応じた処理の分岐が必要になる場面が必ず訪れます。
type()関数を使えばいいんでしょ?」と思っている方も多いかもしれませんが、実は型判定に type() を使うことは推奨されていないケースが多くあります。この記事では、Pythonにおける変数の型確認の基本である type() と isinstance() の違いから、条件分岐での正しい使い方、そして現在の開発現場で主流となっている「静的型チェック(型ヒント)」の活用まで、実務で役立つ知識をサンプルコード付きで徹底解説します。
![]() 執筆者:マヒロ |
|
- OS:Windows 11 / macOS Sequoia
- IDE:Visual Studio / VS Code / IntelliJ IDEA
- その他:Chrome DevTools / 各言語最新安定版
※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。
変数の型を確認する最も基本的な方法:type()
まずは、変数が何の型なのかをコンソールに表示して確認したい場合に使う、最もシンプルな方法から紹介します。 これには、組み込み関数の type() を使用します。
type()関数の使い方
引数に調査したい変数や値を渡すだけで、そのオブジェクトの型(クラス)を返してくれます。
# 整数
num = 100
print(f"100の型: {type(num)}")
# 文字列
text = "Python"
print(f"Pythonの型: {type(text)}")
# リスト
items = [1, 2, 3]
print(f"リストの型: {type(items)}")
実行結果
100の型: <class 'int'>
Pythonの型: <class 'str'>
リストの型: <class 'list'>
type() 関数は、<class 'int'> のような形式で型情報を返します。
デバッグ時(開発中に変数の中身を確認する時)に、「なぜかエラーが出ると思ったら、数値のつもりが文字列になっていた」といった原因を特定するのに非常に便利です。
型判定(条件分岐)には isinstance() を使うべき理由
「変数が文字列だったら処理A、数値だったら処理B」といった条件分岐を行いたい場合、ついつい type() を使って比較したくなりますが、Pythonでは isinstance() 関数を使うのがベストプラクティスです。
type() と isinstance() の違い
なぜ type() による比較(type(obj) == int など)が推奨されないのでしょうか。 それは、継承関係(親子関係)を正しく判定できないからです。
# 親クラス
class Animal:
pass
# 子クラス(Animalを継承)
class Dog(Animal):
pass
pochi = Dog()
# type() での判定
# Dog型はAnimal型と「一致」はしないため False になる
print(f"type判定: {type(pochi) == Animal}")
# isinstance() での判定
# Dog型はAnimal型の一種(サブクラス)なので True になる
print(f"isinstance判定: {isinstance(pochi, Animal)}")
実行結果
type判定: False
isinstance判定: True
オブジェクト指向プログラミングでは、「犬(Dog)は動物(Animal)である」というように、サブクラスを親クラスとして扱いたい場面が多々あります。
isinstance(オブジェクト, クラス) は、そのオブジェクトが指定したクラス、またはそのサブクラスのインスタンスであれば True を返します。
これにより、柔軟でバグの少ないコードを書くことができます。
複数の型をまとめて判定するテクニック
isinstance() の第2引数には、複数の型をタプルで渡すことができます。
「整数または浮動小数点数ならOK」といった判定が簡単に書けます。
value = 3.14
# int型 または float型 なら True
if isinstance(value, (int, float)):
print("これは数値です")
else:
print("これは数値ではありません")
実行結果
これは数値です
実務で役立つ!型ごとの判定パターン集
ここでは、開発時によく遭遇する具体的な型の判定パターンをいくつか紹介します。
文字列(str)かどうかの判定
data = "Hello"
if isinstance(data, str):
print("文字列です。処理を続行します。")
リスト(list)やタプル(tuple)かどうかの判定
data = [1, 2, 3]
if isinstance(data, (list, tuple)):
print("シーケンス(配列のようなもの)です。")
辞書(dict)かどうかの判定
data = {"key": "value"}
if isinstance(data, dict):
print("辞書型です。")
Pythonにおける「型」の種類の基本
Pythonには多くの組み込み型が存在します。
判定を行う際によく使う代表的なものを整理しておきましょう。
| 型の名前 | クラス名 | 例 |
|---|---|---|
| 整数 | int |
10, -5 |
| 浮動小数点数 | float |
3.14, 1.0 |
| 文字列 | str |
"Hello", 'Python' |
| 真偽値 | bool |
True, False |
| リスト | list |
[1, 2, 3] |
| タプル | tuple |
(1, 2) |
| 辞書 | dict |
{"a": 1} |
| セット | set |
{1, 2, 3} |
| None | NoneType |
None |
※ None の判定には isinstance ではなく、if value is None: を使うのが一般的です。
【上級編】型ヒントと静的型チェックの活用
最近のPython開発(特に大規模開発)では、実行時に型を確認するだけでなく、コードを書く段階で型を指定する「型ヒント(Type Hints)」が主流になっています。
型ヒントの書き方
関数の引数や戻り値、変数に : 型名 を付けることで、意図した型を明示できます。
# 引数はint、戻り値もintと明示
def add_numbers(a: int, b: int) -> int:
return a + b
result = add_numbers(10, 20)
これ自体はプログラムの動作に影響を与えませんが、VS Codeなどのエディタがこれを読み取り、誤った型を渡そうとした時に警告を出してくれるようになります。
静的型チェックツール「mypy」
さらに、mypyなどのツールを導入することで、実行前に型のエラーを検出できます。
「動かしてからエラーに気づく」のではなく、「書いている最中に気づく」ことができるため、開発効率と品質が劇的に向上するため、現在、業務レベルのPythonプロジェクトでは必須級の技術となっています。
Pythonのスキルを活かして年収を上げる方法
以上、Pythonで変数の型を確認する方法について解説してきました。
Pythonエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
| 年収アップにこだわりたい方 (平均アップ額138万円の実績) | テックゴー |
| 未経験・経験者問わず幅広く探したい方 | ユニゾンキャリア |
| 業界に精通した担当者に相談したい方 | キッカケエージェント |
| ゲーム業界への転職を志望する方 | ファミキャリ |
| エンジニア未経験からキャリアを築く方 | イーチキャリア |



