Pythonでは、オブジェクトの型やクラスを確認するための便利な関数が用意されています。その中でもisinstance()
関数は、特定のオブジェクトが指定したクラスのインスタンスであるかどうかを判断するのに使われます。
isinstance()
は次のように使用します。
isinstance(object, classinfo)
object
: チェックしたいオブジェクトclassinfo
: クラスまたはクラスのタプルこの関数は、object
がclassinfo
で指定されたクラスのインスタンスである場合に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
Animal
クラスを基底クラスとして、Dog
とCat
という二つのサブクラスを定義しています。Dog
とCat
のインスタンスをそれぞれ作成します。isinstance()
を使って、各インスタンスがどのクラスのインスタンスであるかを確認します。
isinstance(dog, Dog)
は True
を返します。dog
はDog
のインスタンスだからです。
isinstance(dog, Animal)
も True
を返します。Dog
はAnimal
を継承しているためです。isinstance(dog, Cat)
は False
を返します。dog
はCat
のインスタンスではないためです。isinstance()
は、クラスのタプルを使って複数のクラスを同時にチェックすることもできます。
# 複数のクラスを指定
print(isinstance(dog, (Dog, Cat))) # True
print(isinstance(cat, (Dog, Cat))) # True
この例では、dog
はDog
または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()
関数は、オブジェクトが特定のクラスのインスタンスであるかどうかを確認するのに非常に便利です。特に、継承関係にある場合は、親クラスを含めたインスタンスのチェックができるため、クラス設計の際に役立ちます。