0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python初心者】issubclass()関数とisinstance()関数の違いと使い方まとめ

Posted at

Pythonの学習中に issubclass()isinstance() という関数が出てきて、 それぞれの使い方や違いを整理しておきたかったのでメモとしてまとめました。
どちらも「あるクラスやオブジェクトが、他のクラスとどういう関係か」を判別するときに使う関数です。

issubclass()関数:クラス同士の親子関係を調べる

issubclass() は、あるクラスが 指定したクラスのサブクラス(子クラス)かどうか を判定する関数です。

書き方

issubclass(子クラス, 親クラス)

class Animal:
    pass

class Dog(Animal):
    pass

print(issubclass(Dog, Animal))   # True
print(issubclass(Animal, Dog))   # False

DogAnimal を継承しているので、issubclass(Dog, Animal)True になります。
逆に、AnimalDog の親なので、issubclass(Animal, Dog)False になります。

isinstance()関数:オブジェクトの型を調べる

isinstance() は、あるオブジェクトが 指定したクラスのインスタンスかどうか を判定する関数です。

書き方

isinstance(オブジェクト, クラス)

dog = Dog()

print(isinstance(dog, Dog))      # True
print(isinstance(dog, Animal))   # True(親クラスでもTrueになる)
print(isinstance(dog, str))      # False

dogDog クラスから作ったオブジェクトなので、Dog でも Animal(親クラス)でも True になります。
文字列型(str)とは関係ないので isinstance(dog, str)False です。

使い分けのまとめ

関数名 判定対象 何を調べるか
issubclass() クラスとクラス サブクラス(継承関係)かどうか
isinstance() オブジェクトとクラス インスタンス(型)かどうか

補足:Pythonでは「型=クラス」「値=インスタンス」

Pythonでは、「型」と言ったときには intstr のようなクラスのことを指していて、実際の値(データ)はそのクラスから作られた「インスタンス」になっています。

print(type("hello"))           # <class 'str'>
print(isinstance("hello", str))  # True

このように isinstance() は型判定としてよく使われています。
また、issubclass() はクラス設計の場面などで継承関係を確認するのに使われるみたいです。

おわりに

最初は名前が似ていてよくわからなかったのですが、書いてみると役割の違いがはっきりしてきました。
今後もクラスを使う場面で登場しそうなので、引き続き使いながら慣れていきたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?