PyQチームのtsutomuです。
今日は、クエスト「オブジェクト指向の特徴を知ろう」の1問目に関連して、オブジェクトとクラスの関係について簡単に説明します。
オブジェクトと型
Pythonで扱うすべての値は、オブジェクトです。数値の0
や、文字列の'abc'
などがオブジェクトです。
オブジェクトの種類を型(type)と呼びます。
たとえば、0
は整数であるint型、'abc'
は文字列であるstr型です。
※ Pythonで標準で使える型は「Python公式ドキュメントの「組み込み型」」で確認できます。
オブジェクトの型は、type関数 で調べられます。
たとえば、type(0)
を実行すると<class 'int'>
となり、int型であることがわかります。
オブジェクトとクラス
クラスは型の情報を定義したものです。
str型はstrクラス、int型はintクラスとして定義されています。
class構文を使って、自分で新しいクラスを作ることもできます。
オブジェクトは、型が定義されたクラスから作成するため、「クラス=設計図」「オブジェクト=実体」と言えます。
クラスからオブジェクトを作成することを「クラスをインスタンス(実体)化する」といいます。
クラスから作成したオブジェクトのことを「インスタンス」と呼ぶこともあります。
下図は、人を定義したHuman
クラスから、オブジェクト(インスタンス)を作成する例です。
この図のインスタンスがオブジェクトです。
senior
やchild
は以下のように作成できます。
# 100歳のおじいさん senior = Human() senior.age = 100 senior.last_name = '山田' senior.first_name = '太郎' # 10 歳の子供 child = Human() child.age = 10 child.last_name = '山田' child.first_name = '花子'
Pythonでは、クラスもtype型のオブジェクト
ちなみに、Pythonでは、クラス自体もtype型のオブジェクトです。
たとえば「type(Human)
」を実行すると<class 'type'>
となり、Human
クラスがtypeクラスから作られたオブジェクトだとわかります。
クラスと型という言葉は同じように使えますが、言葉の使い方について少し補足します。
オブジェクトを作成するときは、クラスという言葉を使います。
オブジェクトの種類をいうときは、型という言葉を使います。
これは厳密なものではないので、オブジェクトの種類をクラスと言っても間違いではありません。
まとめ
- オブジェクトは、クラスをインスタンス(実体)化したものです。
- クラスは、オブジェクトの型です。