Python isinstance() 関数
isinstance()は、オブジェクトが指定された型(または型タプル内の任意の型)のインスタンスであるかをチェックするためのPythonの組み込み関数です。
isinstance()は、Pythonで最もよく使われる型チェック関数で、正確な型だけでなく継承関係も考慮します(サブクラスも親クラスのインスタンスです)。
単語の意味: isinstance 是 is an instance(是一个实例)的缩写。
基本構文とパラメータ
構文形式
isinstance(object, classinfo)
パラメータ説明
- パラメータ object:
- 型:任意のオブジェクト
- 説明:チェックするオブジェクト。
- パラメータ classinfo:
- 型:型、型タプル、または抽象基底クラス
- 説明:チェックする型。単一の型でも型タプルでも指定できます。
関数説明
- 戻り値:ブール値を返します
True或False。 - 特徴:object が classinfo のサブクラスのインスタンスである場合も True を返します。
例
例1:基本の使い方
例
# 基本型をチェック
print(isinstance(123, int)) # 出力: True
print(isinstance(3.14, float)) # 出力: True
print(isinstance("hello", str)) # 出力: True
print(isinstance([1, 2], list)) # 出力: True
print(isinstance({"a": 1}, dict)) # 出力: True
# None をチェック
print(isinstance(None, type(None))) # 出力: True
# ブール値をチェック(注意:bool は int のサブクラス)
print(isinstance(True, bool)) # 出力: True
print(isinstance(True, int)) # 出力: True(bool は int を継承しているため)
print(isinstance(123, int)) # 出力: True
print(isinstance(3.14, float)) # 出力: True
print(isinstance("hello", str)) # 出力: True
print(isinstance([1, 2], list)) # 出力: True
print(isinstance({"a": 1}, dict)) # 出力: True
# None をチェック
print(isinstance(None, type(None))) # 出力: True
# ブール値をチェック(注意:bool は int のサブクラス)
print(isinstance(True, bool)) # 出力: True
print(isinstance(True, int)) # 出力: True(bool は int を継承しているため)
実行結果の期待値:
True True True True True True True True
コードの解説:
- さまざまな基本型をチェックできます。
- bool は int のサブクラスなので、True/False も int のインスタンスです。
例2:型タプルの使用
例
# 複数の型をチェック(タプルを使用)
value = 42
print(isinstance(value, (int, float))) # 出力: True
print(isinstance(value, (str, list))) # 出力: False
# 複数の型を混合してチェック
value = "hello"
print(isinstance(value, (int, str, bytes))) # 出力: True
# 条件判断に使用
def process_data(data):
if isinstance(data, (list, tuple)):
return sum(data)
elif isinstance(data, (int, float)):
return data * 2
else:
return str(data)
print(process_data([1, 2, 3])) # 出力: 6
print(process_data((1, 2, 3))) # 出力: 6
print(process_data(10)) # 出力: 20
print(process_data(3.14)) # 出力: 6.28
print(process_data("hello")) # 出力: hello
value = 42
print(isinstance(value, (int, float))) # 出力: True
print(isinstance(value, (str, list))) # 出力: False
# 複数の型を混合してチェック
value = "hello"
print(isinstance(value, (int, str, bytes))) # 出力: True
# 条件判断に使用
def process_data(data):
if isinstance(data, (list, tuple)):
return sum(data)
elif isinstance(data, (int, float)):
return data * 2
else:
return str(data)
print(process_data([1, 2, 3])) # 出力: 6
print(process_data((1, 2, 3))) # 出力: 6
print(process_data(10)) # 出力: 20
print(process_data(3.14)) # 出力: 6.28
print(process_data("hello")) # 出力: hello
実行結果の期待値:
True False True 6 6 20 6.28 hello
コードの解説:
- 2番目のパラメータは型タプルにでき、複数の型を同時にチェックできます。
- これは複数のデータ型を扱うときに非常に便利です。
例3:クラスの継承と
例
# クラス継承の例
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
# インスタンスを作成
dog = Dog()
cat = Cat()
animal = Animal()
# isinstance は継承関係を考慮します
print(isinstance(dog, Dog)) # 出力: True
print(isinstance(dog, Animal)) # 出力: True(サブクラスのインスタンスも親クラスのインスタンス)
print(isinstance(dog, Cat)) # 出力: False
print(isinstance(cat, Animal)) # 出力: True
print(isinstance(animal, Dog)) # 出力: False
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
# インスタンスを作成
dog = Dog()
cat = Cat()
animal = Animal()
# isinstance は継承関係を考慮します
print(isinstance(dog, Dog)) # 出力: True
print(isinstance(dog, Animal)) # 出力: True(サブクラスのインスタンスも親クラスのインスタンス)
print(isinstance(dog, Cat)) # 出力: False
print(isinstance(cat, Animal)) # 出力: True
print(isinstance(animal, Dog)) # 出力: False
実行結果の期待値:
True True False True False
isinstance()継承チェーンがチェックされるため、サブクラスのインスタンスも親クラスのインスタンスとみなされます。
その他の拡張
Python3 組み込み関数