【Python】㉑オブジェクト指向プログラミング➁
始めに
今回は前回の続きについて、オブジェクト指向プログラミングについて学習したいと思います。
前回の記事はこちら
__init__メソッド
__init__メソッドを定義すると、インスタンスを生成する際に同時にデータ属性を設定することができます。
__init__メソッドは以下のように定義します。
----------
class クラス名 :
def __init__(self , 引数 , ...):
self.データ属性名 = 値
----------
また、__init__を使う場合、インスタンスの生成は以下のようにします。
----------
変数 = クラス名(引数 , ...)
----------
例➀__init__メソッド
前回同様、ポケモンを例に示していこうと思います。
ポケモンの名前、レベル、タイプ、特性についてまとめ表示します。
表示するポケモンは、サルノリ、ヒバニー、メッソンです。
__init__メソッドを使用すると以下のようになります。
<Pokemon2.py>
前回のものと比較すると、ずいぶんとコンパクトになったと感じると思います。
メソッドの追加
クラスには複数のデータ属性を持たせることができます。
既存のクラスに新たにメソッドを追加し、クラスを拡張することができます。
例➁メソッドの追加
先ほど作成したクラスに、レベルアップのメソッドを追加しようと思います。
<Pokemon3.py>
このレベルアップメソッドは引数として数値を渡すと、その数値がレベルに加算されます。
実際に実行して、インスタンスではレベルは1ですが、きちんとレベルアップされていることを確認してみてください。
マングリング
一般的にメソッドはクラス外部からでも呼び出せますが、クラス内部だけで使うメソッドを定義する事もあります。
そのメソッドを定義することで、クラス内部の処理が実装しやすくなるけれども、外部に公開するほどの機能ではないという場合に用います。
説明ではイメージしにくいと思うので、例を見てみましょう。
例③マングリング
ポケモンのレベルは最高100なので、レベルの制限を追加しようと思います。
レベルが100以上にとなる場合、100になるよう調整します。
<Pokemon4.py>
上記のように、2個のアンダーバーから始まるメソッド名は、自動的に「_クラス名__メソッド名」という名前に変換されます。
これはマスキングという機能です。
マスキングのいう機能のおかげで、メソッドを間違って呼んでしまう危険性を減少させます。
最後に
今回も前回に引き続き、オブジェクト指向プログラミングについて学習しました。
クラスを定義することは、今後も必須になってくるので覚えておきましょう。