<一覧に戻る

isinstance() を使ったインスタンスのチェック

Pythonでは、オブジェクトの型やクラスを確認するための便利な関数が用意されています。その中でもisinstance()関数は、特定のオブジェクトが指定したクラスのインスタンスであるかどうかを判断するのに使われます。

instanceofの基本的な使い方

isinstance()は次のように使用します。

isinstance(object, classinfo)
  • object: チェックしたいオブジェクト
  • classinfo: クラスまたはクラスのタプル

この関数は、objectclassinfoで指定されたクラスのインスタンスである場合にTrueを返し、そうでない場合はFalseを返します。

サンプルコード

以下に、isinstance()を使用した具体的な例を示します。

class Animal:
    pass

class Dog(Animal):
    pass

class Cat(Animal):
    pass

# インスタンスを作成
dog = Dog()
cat = Cat()

# isinstanceを使ったチェック
print(isinstance(dog, Dog))       # True
print(isinstance(cat, Cat))       # True
print(isinstance(dog, Animal))    # True
print(isinstance(cat, Animal))    # True
print(isinstance(dog, Cat))       # False

コードの解説

  1. Animalクラスを基底クラスとして、DogCatという二つのサブクラスを定義しています。
  2. DogCatのインスタンスをそれぞれ作成します。
  3. isinstance()を使って、各インスタンスがどのクラスのインスタンスであるかを確認します。

  4. isinstance(dog, Dog)True を返します。dogDogのインスタンスだからです。

  5. isinstance(dog, Animal)True を返します。DogAnimalを継承しているためです。
  6. 最後に isinstance(dog, Cat)False を返します。dogCatのインスタンスではないためです。

複数のクラスをチェックする

isinstance()は、クラスのタプルを使って複数のクラスを同時にチェックすることもできます。

# 複数のクラスを指定
print(isinstance(dog, (Dog, Cat)))  # True
print(isinstance(cat, (Dog, Cat)))  # True

この例では、dogDogまたはCatのいずれかのインスタンスであるため、Trueが返されます。

実践問題

以下のクラスを定義し、isinstance()を使用してインスタンスのチェックを行ってみましょう。

class Vehicle:
    pass

class Car(Vehicle):
    pass

class Bike(Vehicle):
    pass

# あなたのコードを書いてみてください

期待される結果

  • isinstance(car_instance, Car)True
  • isinstance(car_instance, Vehicle)True
  • isinstance(bike_instance, Car)False

まとめ

isinstance()関数は、オブジェクトが特定のクラスのインスタンスであるかどうかを確認するのに非常に便利です。特に、継承関係にある場合は、親クラスを含めたインスタンスのチェックができるため、クラス設計の際に役立ちます。

出力結果: