用語比較
isinstanceとtypeの違い|派生クラスを含めて判定するか、型そのものを返すか(Python3基礎)
type()はオブジェクトの型そのものを返し、isinstance()は指定した型かその派生クラスのインスタンスかをTrueかFalseで返します。どちらも、オブジェクトの型を調べるときに使う組み込み関数です。
型を取り出すのがtype()、型として扱えるかを判定するのがisinstanceと区別するのが出発点です。Python公式は、派生クラスを考慮に入れるこちらを型の確認に推奨しています。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
isinstance()とtype()の要点
isinstance()
オブジェクトが、指定した型か、その派生クラスのインスタンスかを、TrueかFalseで返す。型はタプルで複数も渡せる。
type()
引数が1つのとき、オブジェクトの型そのものを返す。派生クラスかどうかは考慮しない。
違いを表で確認
| 比較軸 | isinstance() | type() |
|---|---|---|
| 返すもの | TrueかFalse | 型のオブジェクト(例: <class 'bool'>) |
| 派生クラスの扱い | 派生クラスのインスタンスもTrueにする | そのオブジェクトの型そのものしか返さない。比べると派生クラスは一致しない |
| 複数の型の判定 | isinstance(x, (int, float))のように、型のタプルを渡せる | 1つの型との比較を、型の数だけ書く必要がある |
| boolとintの場合 | isinstance(True, int)はTrue | type(True) == intはFalse(type(True)はbool) |
| 公式の推奨 | オブジェクトの型を調べるには、こちらが推奨されている | 引数1つの形は、型のオブジェクトを取り出す用途 |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
type(x) == int と isinstance(x, int) で、結果が違った人
xがboolのように、intの派生クラスのインスタンスのときに食い違います。isinstance(True, int)はTrueですが、type(True) == intはFalseです。
自作クラスの派生クラスも、同じ種類として扱いたい人
基底クラスを指定したisinstance()なら、派生クラスのインスタンスもTrueになります。type()との比較では、派生クラスは一致しません。
数値なら、整数でも小数でもよいと判定したい人
isinstance(x, (int, float))と、型をタプルで渡します。タプルの型のどれかに当てはまればTrueです。
具体例で使い分ける
例 1
True が整数かどうかを調べる場合
isinstance(True, int)とtype(True) == intの2つの式を、それぞれ評価する場面です。
- boolはintの派生クラスです。issubclass(bool, int)はTrueになります。
- isinstance(True, int)は、派生クラスのインスタンスもTrueにするので、結果はTrueです。
- type(True)はboolを返すので、type(True) == intはFalseになります。
結論: isinstance(True, int)はTrue、type(True) == intはFalseです。
例 2
基底クラスと派生クラスを判定する場合
class Animal: pass と class Dog(Animal): pass を定義し、d = Dog() としたとき、AnimalとのisinstanceとtypeをAnimalと比べる場面です。
- dはDogのインスタンスで、DogはAnimalの派生クラスです。
- isinstance(d, Animal)は、派生クラスのインスタンスもTrueにするので、Trueです。
- type(d)はDogなので、type(d) == AnimalはFalseになります。
結論: isinstance(d, Animal)はTrue、type(d) == AnimalはFalseです。
問題文から答えを選ぶ手順
- 1
何がほしいかを決める
型そのものを取り出したいのか、ある型として扱えるかを判定したいのかを決めます。
- 2
判定ならisinstance()
派生クラスも同じ種類として数えたいなら、isinstance()を使います。公式も、型を調べる用途にはこちらを推奨しています。
- 3
複数の型はタプルで渡す
整数か小数か、のように複数の型を許すなら、isinstance(x, (int, float))と書きます。
- 4
取り出すならtype()
型のオブジェクトそのものがほしいときは、引数1つのtype()を使います。
試験での見分け方
- 1isinstance()は、指定した型か派生クラスのインスタンスならTrueを返す。
- 2type()は型そのものを返し、派生クラスのインスタンスを基底クラスと比べると一致しない。
- 3boolはintの派生クラスなので、isinstance(True, int)はTrue、type(True) == intはFalseになる。
- 4公式チュートリアルの9章(クラス)は、継承に関わる組み込み関数としてisinstance()とissubclass()を挙げている。
誤答しやすい選択肢
type(x) == int と isinstance(x, int) を同じ判定と考える
修正: 派生クラスのインスタンスのとき、結果が分かれます。boolはintの派生クラスなので、Trueで差が出ます。
isinstance()は、型そのものを返す関数だと考える
修正: isinstance()が返すのはTrueかFalseです。型のオブジェクトを返すのは、引数1つのtype()です。
複数の型を判定するのに、isinstance()を何度も書くしかないと考える
修正: 第2引数に型のタプルを渡すと、そのどれかに当てはまればTrueになります。
確認問題
Q1isinstance(True, int) の結果は何ですか?
答え: True
boolはintの派生クラスで、isinstance()は派生クラスのインスタンスもTrueにします。
Q2type(True) == int の結果は何ですか?
答え: False
type(True)はboolを返します。boolとintは別の型なので、一致しません。
Q3整数か小数のどちらかなら、Trueにしたい。isinstanceの第2引数はどう書きますか?
答え: (int, float)
isinstance()は、第2引数が型のタプルのとき、どれかの型に当てはまればTrueを返します。
到達チェック
- isinstance()とtype()が返すものの違いを言える
- 派生クラスのインスタンスでの結果の違いを説明できる
- isinstance(True, int)とtype(True) == intの結果を答えられる
- 複数の型をタプルで判定する書き方を書ける
関連ページで確認する
同じ資格で次に知りたいこと
- オーバーライドとオーバーロードの違い|Pythonで使えるのはどちらか(Python3基礎)
オーバーライドとオーバーロードの違いを、Pythonでの動き、同名メソッドを書いたときの結果、実行例で解説。Python3エンジニア認定基礎試験の継承で迷う人向けの確認問題つきです。
- 例外処理の try/except と if による事前確認の違い
Pythonの try/except(例外処理)と if による事前確認の違いを、処理の流れ、書き方の名前(EAFPとLBYL)、競合状態の注意点、Python3基礎試験での判断手順と確認問題まで解説します。
- 内包表記のifの位置の違い|末尾のif句(絞り込み)と先頭のif-else(値の切り替え)
リスト内包表記の末尾にif句を置く書き方と、先頭にif-elseの条件式を置く書き方の違いを、要素数が変わるかどうか、elseを書けるかどうかから解説。Python 3 エンジニア認定基礎試験での読み取り手順と確認問題つきです。
よくある質問
Qisinstanceとtypeの一番大きな違いは何ですか?
返すものと、派生クラスの扱いです。isinstance()はTrueかFalseを返し、派生クラスのインスタンスもTrueにします。type()は型そのものを返します。
Q型を調べるには、isinstanceとtypeのどちらを使うべきですか?
Python公式の組み込み関数の説明は、オブジェクトの型を調べるにはisinstance()が推奨されるとしています。派生クラスを考慮に入れるためです。
Qisinstance(True, int) はTrueになりますか?
なります。boolはintの派生クラスで、isinstance()は派生クラスのインスタンスもTrueにします。type(True) == intはFalseです。
Qisinstanceで、複数の型をまとめて判定できますか?
できます。第2引数に型のタプルを渡すと、どれかの型に当てはまればTrueを返します。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
