Haruchunのブログ

大学生の'春'のお勉強の備忘録

【Python】㉑オブジェクト指向プログラミング➁

f:id:Haruchun:20200516170235j:plain

 

始めに

今回は前回の続きについて、オブジェクト指向プログラミングについて学習したいと思います。

 

前回の記事はこちら

haruchun.hatenablog.com

 

 

 

__init__メソッド

__init__メソッドを定義すると、インスタンスを生成する際に同時にデータ属性を設定することができます。

__init__メソッドは以下のように定義します。

----------

class クラス名 :

    def __init__(self , 引数 , ...):

        self.データ属性名 = 値

----------

 

また、__init__を使う場合、インスタンスの生成は以下のようにします。

----------

 

変数 = クラス名(引数 , ...)

----------

 

例➀__init__メソッド

前回同様、ポケモンを例に示していこうと思います。

ポケモンの名前、レベル、タイプ、特性についてまとめ表示します。

表示するポケモンは、サルノリ、ヒバニー、メッソンです。

 

__init__メソッドを使用すると以下のようになります。

<Pokemon2.py>

f:id:Haruchun:20200516151540p:plain

前回のものと比較すると、ずいぶんとコンパクトになったと感じると思います。

 

 

 

メソッドの追加

クラスには複数のデータ属性を持たせることができます。

既存のクラスに新たにメソッドを追加し、クラスを拡張することができます。

 

例➁メソッドの追加

先ほど作成したクラスに、レベルアップのメソッドを追加しようと思います。

<Pokemon3.py>

f:id:Haruchun:20200516154940p:plain

このレベルアップメソッドは引数として数値を渡すと、その数値がレベルに加算されます。

実際に実行して、インスタンスではレベルは1ですが、きちんとレベルアップされていることを確認してみてください。

 

 

 

マングリング

一般的にメソッドはクラス外部からでも呼び出せますが、クラス内部だけで使うメソッドを定義する事もあります。

そのメソッドを定義することで、クラス内部の処理が実装しやすくなるけれども、外部に公開するほどの機能ではないという場合に用います。

説明ではイメージしにくいと思うので、例を見てみましょう。

 

例③マングリング

ポケモンのレベルは最高100なので、レベルの制限を追加しようと思います。

レベルが100以上にとなる場合、100になるよう調整します。

<Pokemon4.py>

f:id:Haruchun:20200516163928p:plain

上記のように、2個のアンダーバーから始まるメソッド名は、自動的に「_クラス名__メソッド名」という名前に変換されます。

これはマスキングという機能です。

マスキングのいう機能のおかげで、メソッドを間違って呼んでしまう危険性を減少させます。

 

 

 

最後に

今回も前回に引き続き、オブジェクト指向プログラミングについて学習しました。

クラスを定義することは、今後も必須になってくるので覚えておきましょう。