Pythonでオブジェクトの型をチェックするための便利な関数として`isinstance()`があります。この記事では、`isinstance()`の基本的な使い方と実践的な例を紹介します。

isinstance()とは

`isinstance()`は、オブジェクトが指定した型のインスタンスであるかどうかを判定する組み込み関数です。Trueまたは Falseを返します。

基本的な構文:

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

複数の型をチェックする

タプルを使用して、複数の型を一度にチェックできます:

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

y = "Python"
print(isinstance(y, (int, float, str)))  # True

カスタムクラスでの使用

独自のクラスでも`isinstance()`を使用できます:

class Animal:
    pass

class Dog(Animal):
    pass

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

注意点と良い使用例

1. 型チェックの代替手段として

# 悪い例
if type(x) == int:
    pass

# 良い例
if isinstance(x, int):
    pass

2. 継承関係の考慮

`isinstance()`は継承関係を考慮してチェックを行います:

numbers = [1, 2, 3]
print(isinstance(numbers, object))  # True(全てのクラスはobjectを継承)

3. 実践的な使用例

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

# 使用例
print(process_number(10))    # 20
print(process_number(3.14))  # 6.28
# print(process_number("10"))  # TypeError

まとめ

  • `isinstance()`は安全に型チェックを行うための標準的な方法です
  • 単一の型だけでなく、複数の型を同時にチェックできます
  • 継承関係を考慮した型チェックが可能です
  • エラー処理や入力値の検証に特に有用です

この関数を適切に使用することで、より堅牢なPythonプログラムを作成することができます。