type(), isinstance()

type(), isinstance()

type()

 type() は引数に渡したオブジェクトが属している クラス を返します。
 たとえば 10, 10.5, "Python" を調べてみると、それぞれ int, float, strクラスのオブジェクト (整数、浮動小数点数、文字列) であることがわかります。

# PYTHON_TYPE_01

# 変数を定義
a = 10
b = 10.5
c = "Python"

# 各変数のクラス名を取得
print(type(a),type(b), type(c))
<class 'int'> <class 'float'> <class 'str'>

 以下のサンプルコードでは type() を使って、"intクラス" がどのクラスに属しているのかを調べています。

# PYTHON_TYPE_02

# intクラスのクラス名を調べる
x = type(int)

print(x)
<class 'type'>

 実行すると intクラスが typeクラス のオブジェクトであることがわかりました。Python において、あらゆるクラスは typeクラスに属しています。さらに、type クラスについて調べてみると ...

# PYTHON_TYPE_03

# typeクラスのクラス名を取得
x = type(type)

print(x)
<class 'type'>

 typeクラスも typeクラスに属していることがわかりました。
 モジュールは moduleクラスに属しています。

# PYTHON_TYPE_04

# datetimeモジュールをインポート
import datetime

# datetimeモジュールのクラス名を取得
x = type(datetime)

print(x)
<class 'module'>

 

Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習

新品価格
¥4,536から
(2019/10/24 18:17時点)


 listオブジェクトを iter() に渡すと、list_iteratorクラスのインスタンスが生成されます。

# PYTHON_TYPE_05

# イテレータのクラス名を取得
x = type(iter(["a", "b", "c"]))

print(x)
<class 'list_iterator'>

 定義した関数は functionクラスのオブジェクトです。

# PYTHON_TYPE_06

# 関数の定義
def my_func():
    return "Good Morning!"

# my_funcのクラス名を取得
x = type(my_func)

print(x)
<class 'function'>

 

isinstance()

 isinstance() はオブジェクトのクラスを判定します。

isinstance(object, classinfo)

 第 1 引数に渡したオブジェクトが第 2 引数に渡したクラス、またはそのサブクラスである場合は True, それ以外は False を返します。

 たとえば、数値 100 は整数型なので、isinstance(100, int) は True を返します。

PYTHON_ISINSTANCE_01

# 100は整数?
x = isinstance(100, int)

print(x)
True

 100 は文字列ではないので、isinstance(100, str) は False を返します。

PYTHON_ISINSTANCE_02

# 100は文字列?
x = isinstance(100, str)

print(x)
False

 ブール型 (bool) は整数型 (int) のサブクラスなので、isinstance(False, int) は True を返します。

PYTHON_ISINSTANCE_03

# Falseは整数型のサブクラスのオブジェクト?
x = isinstance(False, int)

print(x)
True

 第 2 引数 classinfo にはタプルを渡すこともできます。
 その場合、object がタプルの要素のいずれかのクラスに属している場合は True、どのクラスにも属していない場合は False を返します。
 たとえば 100 は整数型なので、isinstance(100, (int, str, list)) は True を返します。

PYTHON_ISINSTANCE_04

# 100は整数、文字列、リストのどれかに属する?
x = isinstance(100, (int, str, list))

print(x)
True

 100 は複素数型でも辞書型でもないので、isinstance(100, (complex, dict)) は False を返します。

PYTHON_ISINSTANCE_05

# 100は複素数、辞書のどちらかに属する?
x = isinstance(100, (complex, dict))

print(x)
False