🔖
【初心者向け】Pythonのtype() と isinstance() の違いを整理する
はじめに
Pythonでは、変数の「型(データ型)」を調べたい場面がよくあります。
そのときによく使われるのが type() と isinstance() です。
私自身、最初は「どちらを使えばいいのか?」「違いがよくわからない」と感じました。
本記事では、type() と isinstance() の違いについて、
役割・使いどころ・注意点を初心者向けに整理します。
1. type() の基本
type() は、オブジェクトの正確な型を取得するための関数です。
print(type(123)) # <class 'int'>
print(type("hello")) # <class 'str'>
print(type([1, 2, 3])) # <class 'list'>
型が「何であるか」を正確に知りたいときに便利です。
また、取得した型と比較することもできます。
x = 123
if type(x) == int:
print("x は整数です")
2. isinstance() の基本
isinstance() は、変数が特定の型に属しているかどうかを判定する関数です。
x = 123
if isinstance(x, int):
print("x は整数です")
基本的な使い方は type() による比較と似ていますが、
継承関係を考慮できるという違いがあります。
3. type()とisinstance()の違い:継承に対応するかどうか
例:自作クラスで比較
class Animal:
pass
class Dog(Animal):
pass
d = Dog()
print(type(d) == Animal) # False
print(isinstance(d, Animal)) # True
このように、type() は「完全に一致する型かどうか」しか見ません。
一方、isinstance() は 継承元のクラスかどうかも含めて判定してくれます。
4. 使い分けの目安(まとめ)
| 目的 | 使う関数 | 備考 |
|---|---|---|
| 型を正確に知りたい(完全一致) | type() |
デバッグやログ出力でよく使われます |
| 型の一種かどうかを調べたい(継承含む) | isinstance() |
クラス階層を考慮した型チェックが可能です (実務でもよく使われます) |
🔸 実務では、
isinstance()を使うことが多いですが、
正確な型を知りたいときや、ログに記録したいときはtype()も有効です。
おわりに
type() と isinstance() は似たように見えて、目的が異なる関数です。
Pythonに慣れてきた頃には自然に使い分けられるようになりますが、
最初は「継承を含めて調べたいなら isinstance()」と覚えておくと、使い分けの目安になります。
本記事が理解の一助になれば幸いです。
Discussion