鉄は熱いうちに打て
=============================
Effective Pythonで学ぶ - 3章 クラスと継承3¶
2017-12-07
昨日までのあらすじ¶
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継承するそうです。
ありがたいお言葉をいただいたので、精進します。
クラスの継承はインスタンスとして1つなので boku はおじいちゃんでもあるという解釈になります。クラス、継承、インスタンスの概念を根本的に学びなおしたほうがいいのではと思います。
— あお (@aodag) 2017年12月7日