🔖
【初心者向け】Pythonのtype() と isinstance() の違いを整理する
はじめに
Pythonでは、変数の「型(データ型)」を調べたい場面がよくあります。
そのときによく使われるのが type()
と isinstance()
です。
私自身、最初は「どちらを使えばいいのか?」「違いがよくわからない」と感じました。
本記事では、type()
と isinstance()
の違いについて、
役割・使いどころ・注意点を初心者向けに整理します。
type()
の基本
1. 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 は整数です")
isinstance()
の基本
2. isinstance()
は、変数が特定の型に属しているかどうかを判定する関数です。
x = 123
if isinstance(x, int):
print("x は整数です")
基本的な使い方は type()
による比較と似ていますが、
継承関係を考慮できるという違いがあります。
type()
とisinstance()
の違い:継承に対応するかどうか
3. 例:自作クラスで比較
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