AI資格ドリル
資格を選ぶ

用語比較

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)はTruetype(True) == intはFalse(type(True)はbool)
公式の推奨オブジェクトの型を調べるには、こちらが推奨されている引数1つの形は、型のオブジェクトを取り出す用途

Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

type(x) == int と isinstance(x, int) で、結果が違った人

xがboolのように、intの派生クラスのインスタンスのときに食い違います。isinstance(True, int)はTrueですが、type(True) == intはFalseです。

02

自作クラスの派生クラスも、同じ種類として扱いたい人

基底クラスを指定したisinstance()なら、派生クラスのインスタンスもTrueになります。type()との比較では、派生クラスは一致しません。

03

数値なら、整数でも小数でもよいと判定したい人

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. 1

    何がほしいかを決める

    型そのものを取り出したいのか、ある型として扱えるかを判定したいのかを決めます。

  2. 2

    判定ならisinstance()

    派生クラスも同じ種類として数えたいなら、isinstance()を使います。公式も、型を調べる用途にはこちらを推奨しています。

  3. 3

    複数の型はタプルで渡す

    整数か小数か、のように複数の型を許すなら、isinstance(x, (int, float))と書きます。

  4. 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の結果を答えられる
  • 複数の型をタプルで判定する書き方を書ける

同じ資格で次に知りたいこと

よくある質問

Qisinstanceとtypeの一番大きな違いは何ですか?

A

返すものと、派生クラスの扱いです。isinstance()はTrueかFalseを返し、派生クラスのインスタンスもTrueにします。type()は型そのものを返します。

Q型を調べるには、isinstanceとtypeのどちらを使うべきですか?

A

Python公式の組み込み関数の説明は、オブジェクトの型を調べるにはisinstance()が推奨されるとしています。派生クラスを考慮に入れるためです。

Qisinstance(True, int) はTrueになりますか?

A

なります。boolはintの派生クラスで、isinstance()は派生クラスのインスタンスもTrueにします。type(True) == intはFalseです。

Qisinstanceで、複数の型をまとめて判定できますか?

A

できます。第2引数に型のタプルを渡すと、どれかの型に当てはまればTrueを返します。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)