オブジェクト指向への理解が浅くインターン先で理解しきれないPythonのコードがあったので勉強したことを細分化してまとめます。
オブジェクト指向とは
現代のプログラミングの設計方法論として、最もメジャーなもの。オブジェクト指向においてはクラスという概念を用いて、それを設計の最小単位にすることで、保守性と再利用性を高めるソフトウェア開発技術。
保守性・・・維持管理のしやすさ
再利用性・・・プログラミングの再利用のしやすさ
変数だけを定義するとか、関数だけを定義することを許容せずに、必ず「クラスXXの変数」「クラスYYの関数」という形で持ち主を明記するようにしている。
オブジェクトとは
Pythonの公式ドキュメントでは
pythonにおけるオブジェクト(object)とは、データを抽象的に表したものです。
Pythonプログラムにおけるデータはすべて、オブジェクトまたはオブジェクト間の関係として表されます。
オブジェクトはアイデンティティ値(identity)、型(type)、そして値(value)を持ちます。
と記載されている。
オブジェクトには
- アイデンティティ、型、値の3つを持っていること
- データを抽象的に表現したもの
ふたつの大きな性質がある。
アイデンティティ、型、値とは
オブジェクトにおけるアイデンティティとはPythonで使われるオブジェクトはID番号を持っているという意味。以下のコードを実行すると
hello = 'hello world'
print(id(hello))
実行結果
2448634654512
このように数字の羅列が表示される。
id関数を使うことでそのオブジェクトのIDが割り振られていることがわかる。
オブジェクトの値は変数に代入されたデータのことで、上の場合はhello world
が値になる。
オブジェクトの型は整数型や文字列やリスト型といったもので、オブジェクトがどんな型を持っているか確認する関数にtype
というものがある。
print(type(hello))
実行結果
<class 'str'>
strというクラスのオブジェクトだと表示がされます。
例えば下のリストは型のひとつであり、内部に複数のデータをリスト形式で持つ。以下はすべてリスト型のデータです。
[]
[1, 2, 3]
['hello', 'world']
[1, 'python', 3]
リストは "型" であり、上記はそのデータである。リストは "概念" で「1, 2, 3という数字が格納されたリストのデータ」は具体的なモノである。オブジェクト指向におけるこの「概念のレベルでのデータが」クラスであり、その具体的なモノがオブジェクトと呼ばれる。
クラスとオブジェクトの関係を以下にまとめる。
クラス | オブジェクト |
---|---|
整数型 | 1, 2, 3 |
文字列型 | 'hello', 'world' |
リスト | [], ['hello', 'python'] |
この表だけですとオブジェクトととは「具体的なデータ」のように思えるが、そうではなく、データに加えて処理も含んでいる。例えば、リスト[1, 2, 3]
に4
を追加して[1, 2, 3, 4]
とするには以下のように[1, 2, 3]
というリストのオブジェクトに対して追加処理をメソッドとして呼び出す。
a = [1, 2, 3]
print(a)
# listオブジェクトaのメソッド呼び出し
a.append(4)
# オブジェクト自体が変更されている
print(a)
実行結果
[1, 2, 3]
[1, 2, 3, 4]
このように[1, 2, 3]
というリストのオブジェクトがデータだけでなくappend
という処理(メソッド)も持っていて、それを使うことで更新する。
つまり[1, 2, 3]
はリストとしての型と1, 2, 3
という値を持ちながら、かつ関数を保有しているといえる。