クラス名を調べる関数
この記事ではオブジェクトのクラスを調べる関数について解説します。type() は受け取ったオブジェクトのクラス名を返し、isinstance() は受け取ったオブジェクトが特定の クラス に属しているかを判定します。
type()
type() は引数に渡したオブジェクトが属している クラス を返します。
たとえば 10, 10.5, “Python” を調べてみると、それぞれ int, float, strクラスのオブジェクト (整数、浮動小数点数、文字列) であることがわかります。
# PYTHON_TYPE # In[1] # 変数を定義 a = 10 b = 10.5 c = "Python" # 各変数のクラス名を取得 print(type(a),type(b), type(c)) # <class 'int'> <class 'float'> <class 'str'>
以下のサンプルコードでは type() を使って、”intクラス” がどのクラスに属しているのかを調べています。
# In[2] # intクラスのクラス名を調べる x = type(int) print(x) # <class 'type'>
実行すると intクラスが typeクラス のオブジェクトであることがわかりました。Python において、あらゆるクラスは typeクラスに属しています。さらに、type クラスについて調べてみると …
# In[3] # typeクラスのクラス名を取得 x = type(type) print(x) # <class 'type'>
typeクラスも typeクラスに属していることがわかりました。
モジュールは moduleクラスに属しています。
# In[4] # datetimeモジュールをインポート import datetime # datetimeモジュールのクラス名を取得 x = type(datetime) print(x) # <class 'module'>
listオブジェクトを iter() に渡すと、list_iteratorクラスのインスタンスが生成されます。
# In[5] # イテレータのクラス名を取得 x = type(iter(["a", "b", "c"])) print(x) # <class 'list_iterator'>
定義した関数は functionクラスのオブジェクトです。
# In[6] # 関数の定義 def my_func(): return "Good Morning!" # my_funcのクラス名を取得 x = type(my_func) print(x) # <class 'function'>
最後に組み込み関数である print() のクラスを調べてみましょう。
# In[7] # print関数のクラスを調べる type(print) # builtin_function_or_method
builtin_function_or_method、つまり「組み込みの関数またはメソッド」と表示されました。
type() 関数を使用して、実行時にオブジェクトの型をチェックし、条件に基づいて処理を実行できます。例えば、特定の型のオブジェクトを受け取って、それに応じた処理を行う関数を作成する際に有用です。
# In[8] def process_data(data): if type(data) == list: # リストの場合の処理 print("List:", data) elif type(data) == dict: # 辞書の場合の処理 print("Dictionary:", data) else: print("Unsupported data type") data_list = [1, 2, 3] data_dict = {"a": 1, "b": 2} process_data(data_list) # List: [1, 2, 3] process_data(data_dict) # Dictionary: {'a': 1, 'b': 2}
isinstance()
isinstance() はオブジェクトのクラスを判定します。
isinstance(object, classinfo)
第 1 引数に渡したオブジェクトが第 2 引数に渡したクラス、またはそのサブクラスである場合は True, それ以外は False を返します。たとえば、数値 100 は整数型なので、isinstance(100, int) は True を返します。
# PYTHON_ISINSTANCE # In[1] # 100は整数? x = isinstance(100, int) print(x) # rue
100 は文字列ではないので、isinstance(100, str) は False を返します。
# In[2] # 100は文字列? x = isinstance(100, str) print(x) # False
ブール型 (bool) は整数型 (int) のサブクラスなので、isinstance(False, int) は True を返します。
# In[3] # Falseは整数型のサブクラスのオブジェクト? x = isinstance(False, int) print(x) # True
第 2 引数 classinfo にはタプルを渡すこともできます。その場合、object がタプルの要素のいずれかのクラスに属している場合は True、どのクラスにも属していない場合は False を返します。たとえば 100 は整数型なので、isinstance(100, (int, str, list)) は True を返します。
# In[4] # 100は整数、文字列、リストのどれかに属する? x = isinstance(100, (int, str, list)) print(x) # True
100 は複素数型でも辞書型でもないので、isinstance(100, (complex, dict)) は False を返します。
# In[5] # 100は複素数、辞書のどちらかに属する? x = isinstance(100, (complex, dict)) print(x) # False
コメント