本日から、学習を進めていくうえで自分が新たに学んだことをアウトプットする場として投稿をしていきたいと思います。
今まで逃げてきていたオブジェクト指向プログラミングの学習を始めていきたいと思います
そもそもオブジェクト指向プログラミングとは
クラスという設計図をもとにオブジェクト(インスタンス)を生み出して、コードを組み立てていく手法のこと
クラスという枠組みを作って、様々な部品を追加していくようなイメージ
オブジェクト指向プログラミングを行うにあたって重要なクラスの要素は、大きく次の2つがある
- インスタンス変数
- メソッド
これら2つの要素について、人に関する情報を持っているPersonクラスを用いて説明する
1.インスタンス変数
名前の通り、インスタンスに属する変数のこと
Personクラスなら、name(名前)やage(年齢)、height(身長)などがあるだろう
インスタンス変数は次のように追加する
class Person:
def __init__(self, name, age, height):
self.name = name
self.age = age
self.height = height
ここで新しく出現した、def _init は初期化メソッドと呼ばれ、クラスという設計図をもとに新たなインスタンスを作る際に使用されます。
また、引数のselfは新たに作ろうとしているインスタンス自体を表しています。
例えば、今、新しく Person1 という名前のインスタンスを作成しようとしている場面を考えてみましょう。
その場合、selfはPerson1を表していることになります
self.name = name などの箇所は、Person1のnameには引数のnameを代入してくださいといった命令になります。
同様にして、新たにインスタンスを作成するごとに、都度selfがそのインスタンスを表すことになります。
つまり、新たにインスタンスを作成することでselfが毎回初期化されるようなイメージ
インスタンス変数には、インスタンス名. でアクセスできる
Print(Person1.name)
2. メソッド
メソッドとは、クラスの中で定義された関数のことを指します
メソッドを使用する大きなメリットとして、インスタンス変数を呼び出す際の共通的な処理を記述する手間を省けることが挙げられます
例えば、「私の名前は~で、身長は~で、年齢は~です」という文章を出力するために、都度同じコードを記述することは無駄です。
そこで、共通する処理を、一つのメソッドとしてクラスの中にまとめることができます。
名前、身長、年齢を表示するためのintroduceメソッドを追加する
class Person:
def __init__(self, name, age, height):
self.name = name
self.age = age
self.height = height
def introduce(self):
print(f'私の名前は{self.name}で、年齢は{self.age}で、身長は{self.height}です')
メソッドを記述する際も、初期化メソッドの時と同様に、引数の先頭にselfを指定します