Pythonのisinstance()関数は、オブジェクトが特定の型かどうかを判定するために使用される便利な関数です。この記事では、isinstance()関数の基本的な使い方から実践的な例まで詳しく解説します。

isinstance()関数の基本構文

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

基本的な使用例

# 数値型のチェック
x = 100
print(isinstance(x, int))  # True
print(isinstance(x, float))  # False

# 文字列型のチェック
text = "Hello"
print(isinstance(text, str))  # True

# リスト型のチェック
my_list = [1, 2, 3]
print(isinstance(my_list, list))  # True

複数の型をチェックする

isinstance()関数は、複数の型を同時にチェックすることができます:

x = 10.5
print(isinstance(x, (int, float)))  # True

text = "Python"
print(isinstance(text, (list, str, tuple)))  # True

カスタムクラスでの使用

class Animal:
    pass

class Dog(Animal):
    pass

dog = Dog()
print(isinstance(dog, Dog))     # True
print(isinstance(dog, Animal))  # True

isinstance()のよくある使用シーン

1. 型安全なコードの作成

def process_number(value):
    if not isinstance(value, (int, float)):
        raise TypeError("数値を入力してください")
    return value * 2

2. 条件分岐での活用

def format_data(data):
    if isinstance(data, str):
        return data.upper()
    elif isinstance(data, (int, float)):
        return str(data)
    else:
        return "未対応の型です"

注意点とベストプラクティス

1. type()関数との違い

  • isinstance()は継承関係も考慮される
  • type()は厳密な型チェックを行う
class Parent:
    pass

class Child(Parent):
    pass

child = Child()
print(isinstance(child, Parent))  # True
print(type(child) is Parent)      # False

2. Noneのチェック

x = None
print(isinstance(x, type(None)))  # True
# ただし、Noneチェックは通常 is None を使用する
print(x is None)  # こちらが推奨される

まとめ

  • isinstance()は安全な型チェックを実現する
  • 複数の型を同時にチェックできる
  • 継承関係を考慮した判定が可能
  • エラー処理や条件分岐で特に有用

isinstance()関数を適切に使用することで、より堅牢なPythonプログラムを作成することができます。ただし、過度な型チェックはPythonの動的型付けの利点を損なう可能性があるため、必要な場面で適切に使用することが重要です。