AI資格ドリル
資格を選ぶ↓

用語比較

isinstance()とissubclass()の違い|調べる対象はインスタンスか、クラスか(Python3基礎)

isinstance()とissubclass()は、どちらも継承に関係する組み込み関数です。違いは、調べる対象です。isinstance()はインスタンスの型を調べ、issubclass()はクラスどうしの継承関係を調べます。第1引数が値ならisinstance、クラスならissubclassと覚えると、読み分けに迷いません。

Python公式チュートリアル9.5は、この2つを継承に関係する2つの組み込み関数として紹介しています。isinstance(obj, int)は、obj.__class__がintまたはintの派生クラスの場合に限りTrueになります。issubclass(bool, int)はTrue、issubclass(float, int)はFalseです。

Python3エンジニア認定基礎試験は、公式チュートリアルの内容を章ごとの出題率で出題する形で、第9章のクラスと継承も範囲です。この記事では、チュートリアルの例を使って、2つの関数の入力と結果を確認します。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。

結論

isinstance(obj, cls)

インスタンスの型を調べる。obj.__class__がclsまたはclsの派生クラスの場合に限りTrueになる。

issubclass(sub, cls)

クラスの継承関係を調べる。第1引数にはインスタンスではなくクラスを渡す。

違いを表で確認

比較軸isinstance(obj, cls)issubclass(sub, cls)
第1引数に渡すものインスタンス(値)クラス
調べることインスタンスの型クラスの継承関係
チュートリアルの例isinstance(obj, int)は、obj.__class__がintやintの派生クラスの場合に限りTrueissubclass(bool, int)はTrue、issubclass(float, int)はFalse
派生クラスの扱い派生クラスのインスタンスも、基底クラスに対してTrueになるboolはintのサブクラスなので、issubclass(bool, int)はTrueになる

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

試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

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

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

01

issubclass(float, int)がFalseになる理由が分からない人

floatはintのサブクラスではないためです。チュートリアルも、この例でFalseになると説明しています。

02

isinstanceとissubclassのどちらを書けばよいか迷う人

手元にあるのが値(インスタンス)ならisinstance、クラスそのものならissubclassです。

03

boolとintの関係が分からない人

チュートリアルは、boolはintのサブクラスだと説明しています。そのため、issubclass(bool, int)はTrueです。

具体例で使い分ける

例 1

チュートリアル9.5の int・bool・float の例

公式チュートリアル9.5の記述をもとに、intとboolとfloatの関係を読みます。boolはintのサブクラスで、floatはintのサブクラスではありません。

  • issubclass(bool, int)は、クラスどうしの関係を調べます。boolはintのサブクラスなので、Trueです。
  • issubclass(float, int)も、クラスどうしの関係です。floatはintのサブクラスではないので、Falseです。
  • isinstance(obj, int)は、objがインスタンスです。obj.__class__がintやintの派生クラスの場合に限りTrueです。boolはintの派生クラスなので、boolのインスタンスもTrueになります。

結論: 引数にクラスを渡す関数と、値を渡す関数を取り違えないことが、読み分けの要点です。

問題文から答えを選ぶ手順

  1. 1

    第1引数が値かクラスかを見る

    3や True のような値ならインスタンス、int や bool のような名前ならクラスです。

  2. 2

    関数名から調べる内容を決める

    isinstanceはインスタンスの型、issubclassはクラスの継承関係を調べます。

  3. 3

    継承の向きを確かめる

    派生クラスは基底クラスに対してTrueになり、無関係なクラスや、逆向きの関係ではFalseです。

試験での見分け方

  • 1isinstance(obj, cls)は、インスタンスの型を調べる。
  • 2issubclass(sub, cls)は、クラスの継承関係を調べる。
  • 3boolはintのサブクラスなのでissubclass(bool, int)はTrue、floatはintのサブクラスではないのでissubclass(float, int)はFalse。

誤答しやすい選択肢

issubclassの第1引数に、値を渡す

修正: issubclassはクラスの継承関係を調べる関数です。値の型を調べたいなら、isinstanceを使います。

floatはintより広い数だから、サブクラスだと考える

修正: チュートリアルは、floatはintのサブクラスではないので、issubclass(float, int)はFalseだと説明しています。

isinstance(obj, int)は、objの型がちょうどintの場合だけTrueになると考える

修正: obj.__class__がintの派生クラスの場合もTrueになります。

確認問題

Q1インスタンスの型を調べる組み込み関数は?

答え: isinstance()

チュートリアル9.5は、isinstance()を使うとインスタンスの型が調べられると説明しています。

Q2クラスの継承関係を調べる組み込み関数は?

答え: issubclass()

チュートリアル9.5は、issubclass()を使うとクラスの継承関係が調べられると説明しています。

Q3issubclass(bool, int)とissubclass(float, int)の結果は?

答え: 前者はTrue、後者はFalse

boolはintのサブクラスですが、floatはintのサブクラスではありません。

到達チェック

  • isinstanceがインスタンス、issubclassがクラスを調べる関数だと言い分けられる
  • issubclass(bool, int)がTrueで、issubclass(float, int)がFalseの理由を説明できる
  • isinstance(obj, int)が派生クラスのインスタンスでもTrueになることを説明できる

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

よくある質問

Qisinstance()とは?

A

インスタンスの型を調べる組み込み関数です。isinstance(obj, int)は、obj.__class__がintやintの派生クラスの場合に限りTrueになります。

Qissubclass()とは?

A

クラスの継承関係を調べる組み込み関数です。issubclass(bool, int)はTrue、issubclass(float, int)はFalseです。

Qisinstanceとissubclassの違いは?

A

調べる対象です。isinstanceはインスタンスの型、issubclassはクラスの継承関係を調べます。

QPython3基礎試験の範囲?

A

公式の出題範囲は公式チュートリアルの章単位で、第9章のクラスと、9.5の継承を含みます。出題の形式は受験前に公式の案内で確認してください。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)