クラス名を調べる

クラス名を調べる

クラス名を調べる関数

 この記事ではオブジェクトのクラスを調べる関数について解説します。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、つまり「組み込みの関数またはメソッド」と表示されました。
 

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)
True

 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