Pythonのtype()関数[簡単な例と共に]
Pythonのtype()関数を使用して、特定のPythonオブジェクトのタイプを識別します。これは非常に簡単で理解しやすい関数です。さて、これ以上言葉を濁さずに、早速構文に入りましょう。
Pythonのtype()関数の構文
Pythonには多くの組み込み関数があります。type()関数はオブジェクトの型を取得するために使用されます。
Pythonのtype()関数の構文は次のようです。
type(object)
type(name, bases, dict)
単一の引数をtype()関数に渡すと、オブジェクトの型を返します。その値は、object.__class__ インスタンス変数と同じです。
3つの引数が渡されると、新しい型オブジェクトが返されます。これはクラスを動的に作成するために使用されます。
- “name” string becomes the class name. It’s the same as the __name__ attribute of a class.
- “bases” tuple specifies the base classes. It’s the same as the __bases__ attribute of the class.
- “dict” dictionary helps create the class body. It’s the same as the __dict__ attribute of the class.
Pythonのtype()関数の例を以下に示します。
「type()関数の使用例を紹介しましょう。」
1. Pythonオブジェクトのタイプを見つける
x = 10
print(type(x))
s = 'abc'
print(type(s))
from collections import OrderedDict
od = OrderedDict()
print(type(od))
class Data:
pass
d = Data()
print(type(d))
出力:
<class 'int'>
<class 'str'>
<class 'collections.OrderedDict'>
<class '__main__.Data'>
以下のように日本語で言い換えることができます:
type()関数は、オブジェクトのモジュール名と一緒にオブジェクトの型を返すことに注意してください。私たちのPythonスクリプトにはモジュールがないため、モジュールは__main__となります。
2. Pythonクラスからの詳細抽出
以下のクラスを考えてみましょう。クラス、ベース、辞書、およびドキュメントのプロパティを使用して、クラスに関するメタデータを取得します。
class Data:
"""Data Class"""
d_id = 10
class SubData(Data):
"""SubData Class"""
sd_id = 20
これらのクラスのいくつかのプロパティを表示しましょう。
print(Data.__class__)
print(Data.__bases__)
print(Data.__dict__)
print(Data.__doc__)
print(SubData.__class__)
print(SubData.__bases__)
print(SubData.__dict__)
print(SubData.__doc__)
出力する:
<class 'type'>
(<class 'object'>,)
{'__module__': '__main__', '__doc__': 'Data Class', 'd_id': 10, '__dict__': <attribute '__dict__' of 'Data' objects>, '__weakref__': <attribute '__weakref__' of 'Data' objects>}
Data Class
<class 'type'>
(<class '__main__.Data'>,)
{'__module__': '__main__', '__doc__': 'SubData Class', 'sd_id': 20}
SubData Class
type()関数を使って似たようなクラスを作成することができます。
Data1 = type('Data1', (object,), {'__doc__': 'Data1 Class', 'd_id': 10})
SubData1 = type('SubData1', (Data1,), {'__doc__': 'SubData1 Class', 'sd_id': 20})
print(Data1.__class__)
print(Data1.__bases__)
print(Data1.__dict__)
print(Data1.__doc__)
print(SubData1.__class__)
print(SubData1.__bases__)
print(SubData1.__dict__)
print(SubData1.__doc__)
出力:
<class 'type'>
(<class 'object'>,)
{'__doc__': 'Data1 Class', 'd_id': 10, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Data1' objects>, '__weakref__': <attribute '__weakref__' of 'Data1' objects>}
Data1 Class
<class 'type'>
(<class '__main__.Data1'>,)
{'__doc__': 'SubData1 Class', 'sd_id': 20, '__module__': '__main__'}
SubData1 Class
type()関数を使用して動的クラスで関数を作成することはできません。
「type()」関数の実際の使用方法
Pythonは動的型付けの言語です。ですので、引数の型を知りたい場合は、type()関数を使うことができます。特定のオブジェクト型だけで関数が動作することを確認したい場合は、isinstance()関数を使ってください。
以下の方法で、二つの整数で何かを計算する関数を作りたいとしましょう。それを次のように実装できます。
def calculate(x, y, op='sum'):
if not(isinstance(x, int) and isinstance(y, int)):
print(f'Invalid Types of Arguments - x:{type(x)}, y:{type(y)}')
raise TypeError('Incompatible types of arguments, must be integers')
if op == 'difference':
return x - y
if op == 'multiply':
return x * y
# default is sum
return x + y
isinstance()関数は、入力引数の型を検証するために使用されます。type()関数は、検証が失敗した場合にパラメータの型を表示するために使用されます。
参考文献
- type() API Doc
- Python isinstance() function
- Python Type Checking