Python

【Python】16.メソッドの呼び出し

クラスからメソッドを呼び出す

まずは、簡単にclassから関数(メソッド)を呼び出してみましょう。


class Ryuubi:
    def __init__(self, busyou):
        self.busyou = busyou

    def kougeki(self, zyosyuu):
        print(self.busyou + "は、" + zyosyuu + "を攻撃した!")

class Syoku(Ryuubi):
    def kougeki(self, zyosyuu):
        self.__fire()
        print(self.busyou + "は、" + zyosyuu + "に炎を放った!")
    def __fire(self):
        print("「呂布の攻撃。味方は大ダメージを受けた」")

print("徐州軍との戦い")
kakouton = Ryuubi("夏侯惇")
kakouenn = Ryuubi("夏侯淵")
kyoui = Syoku("姜維")

gi = [kakouton, kakouenn, kyoui]
for syougunn in gi:
    syougunn.kougeki("呂布")

class「劉備」を定義
コンストラクタ。
引き取った値を武将として格納します。
関数「攻撃」を定義引き取った値を徐州として格納します。
変数「武将」は「徐州」を攻撃すると出力します。
劉備を継承するclass「蜀」を定義します。
劉備の行っていた攻撃を蜀でもオーバーライドします。
火計を用いましょう。後に定義する関数fireを使用します。
心苦しいですが、火計で武将は徐州に火を放ちます。
さてfireを定義します。これをプライベート関数にしましょう。これはclass外では使用できません。
呂布の攻撃により味方は大ダメージを受けます。
タイトル代わりに徐州軍との戦いと出力します。
class劉備から夏侯惇、夏侯淵のインスタンスを作成します。
なんか陣営違いますが客将という事にしましょう。
最後に継承したclass蜀から姜維を作成します。
リスト魏を作成。ちょっと効率悪いですが練習ですので夏侯惇、夏侯淵、姜維を格納します。
for文開始。変数名は将軍として魏の将軍リストがある限り繰り返します。
将軍はそれぞれの値でメソッド「攻撃」を行います。引数は呂布とします。

出力結果
徐州軍との戦い
夏侯惇は、呂布を攻撃した!
夏侯淵は、呂布を攻撃した!
「呂布の攻撃。味方は大ダメージを受けた」
姜維は、呂布に炎を放った!

同じ攻撃をしていますが、オーバーライドされている関数を持っている蜀のインスタンス姜維だけが攻撃でなく火攻めを行います。同じメソッドでも元となるclassのメソッド実行と継承・オーバーライドされたメソッドの実行で結果が違う事がわかります。

コメントを残す

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