Pythonとポケモンとオブジェクト指向

はじめに

誰でもエンジニアさんの動画でオブジェクト指向について分かりやすく解説していたものがあった。

使用している言語はPythonで、プログラム内容はポケモンの対戦シーン。

オブジェクト指向のポイント

呼び出し元の処理を楽にするというのがポイント。

今回の例で言うと、ポケモンの内容はポケモンクラスにまとめて書くことで、呼び出し元ではポケモンクラスのインスタンスを生成して、使いたいメソッドを呼び出したりするだけで済む。

コンストラクタでインスタンス生成時に初期情報をセットする

ポケモンクラスのコンストラクタでポケモンの名前や攻撃力などの情報をセットできる。

上記の5行目で初期情報が渡されたポケモンインスタンスが生成される。

他のファイルあるクラスを使いたい場合は、「from ファイル名 import クラス名」と書く。

ポケモンクラスを継承してピカチュウクラスを作成する

継承という仕組みについて触れていこう。

親クラスの機能を引き継いで小クラスを作成することができるのが継承。

以下の例では、ポケモンクラスを継承して、ピカチュウクラスを作成している。

superを使うことで親クラスのコンストラクタを呼び出している。

ポケモン毎に違う振る舞いを持たせる多態性

ポケモンクラスを色んなポケモンで継承して、attack_messageメソッドの振る舞いを変えることができる。

先ほどのピカチュウクラスでは、10万ボルト!というメッセージが出る。

ひとかげクラスでは、ひのこというメッセージを出すようにすることができる。

呼び出し元では、ピカチュウインスタンスでも、ひとかげインスタンスでも同じattack_messageメソッドを呼び出した時に、違う振る舞いをする。

attackメソッドはGameクラスのbattleメソッドで呼び出している。

battleメソッドには、呼び出し元で、ポケモン2匹を渡す。

カプセル化で外部からの変更を防ぐ

変数名に_をつけるとクラスの外から値を変更することができなくなる。

nameプロパティを定義して、値を返すことができる。

値をセットすることもできる。セッターを使用すれば、条件に合わせてプライベート変数に値を入れることもできる。以下の23行目以降のセッターに注目してほしい。これでhpのセット方法をポケモンクラスで定義できるようになった。

hpはコンストラクタで以下のように定義されている。

セッターは呼び出し元で以下のように使用する。

10000をセットしたら、40が返っていることが分かるだろう。

この理由は、セッターの定義部分で、elif value > self._max_hpという条件の時、self._hp = self._max_hpとしているから。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

投稿ID : 28349