継承と多態性

多重継承

Pythonの継承には、ちょっと面白い特徴があるんだ。それは、「多重継承(たじゅうけいしょう)」というものだよ。

これは、一つの子クラスが、複数の親クラスから機能を引き継ぐことができる、というものなんだ。まるで、いろんなキャラクターの特技を、全部まとめて持っているスーパーヒーローを作るみたいな感じだね!

例えば、空を飛べる能力を持つ「鳥」のクラスと、泳げる能力を持つ「魚」のクラスがあったとするよね。この二つの能力をどちらも持つ「空飛ぶ魚」なんていうクラスを作りたいときに、多重継承が役立つんだ。

書き方は、子クラスのカッコの中に、カンマ(,)で区切って、引き継ぎたい親クラスの名前を並べて書くだけだよ。


# 親クラス1:Flyer(飛ぶ能力)
class Flyer:
    def fly(self):
        print("空を飛んでいます!")

# 親クラス2:Swimmer(泳ぐ能力)
class Swimmer:
    def swim(self):
        print("水中を泳いでいます!")

# 子クラス:FlyingFish(空飛ぶ魚)。FlyerとSwimmerの両方を継承するよ!
class FlyingFish(Flyer, Swimmer):
    def __init__(self, name):
        self.name = name
        print(self.name + "が生まれました!")

fishy = FlyingFish("ピョン吉")
fishy.fly()  # Flyerクラスのflyメソッドが使える!
fishy.swim() # Swimmerクラスのswimメソッドも使える!
# 出力:
# ピョン吉が生まれました!
# 空を飛んでいます!
# 水中を泳いでいます!

これで、FlyingFishクラスは、Flyerクラスのfly()メソッドと、Swimmerクラスのswim()メソッドの両方を使うことができるようになったね!

多重継承はとても強力な機能だけど、ちょっと注意が必要なこともあるんだ。もし、複数の親クラスに同じ名前のメソッドがあった場合、Pythonはどのメソッドを使えばいいか、決まった順番(MRO: Method Resolution Orderというルール)で探していくんだ。

最初は少し難しいかもしれないけど、こんな機能もあるんだなってことを知っておくと、将来もっと複雑なプログラムを作る時に役立つはずだよ!