🔖

【初心者向け】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