昨日までのあらすじ

Effective Pythonを真面目に読もうと思ったので読みはじめました。

3章 クラスと継承

  • 項目 25:親クラスを superを使って初期化する

昨日のコンストラクタの話ですが、Python文法詳解の6.4.3継承にありました。 MRO(Method Resolution Order)で検索していくらしいです。同じ親を持つと兄弟も検索していくそうです。

おじいちゃんもおばあちゃんも objectを継承して、 super()を書いたら、こうなりました。

class GrandPa:
    def __init__(self):
        super().__init__()
        print('おじいちゃん')

class Papa(GrandPa):
    def __init__(self):
        super().__init__()
        print('パパ')

class GrandMa:
    def __init__(self):
        super().__init__()
        print('おばあちゃん')


class Mama(GrandMa):
    def __init__(self):
        super().__init__()
        print('ママ')


class Boku(Papa, Mama):
    def __init__(self):
        super().__init__()
        print('僕')


boku = Boku()

大集合

おばあちゃん
ママ
おじいちゃん
パパ
僕

スッキリして良かったです。

結局、多重継承を使って1から書いたりしないのですが、知っておくのはいいことですね。 わからないと調べるし。

クラスの章が重い。これ、読み終わるのかな。。。

追記

Python3は「class GrandPa(object):」書かなくてもobject継承するそうです。

ありがたいお言葉をいただいたので、精進します。