###super()の動き(仕様)を説明してほしいです。
###経緯
多重継承すると、継承順で一番先にメソッドを定義している
スーパークラスのメソッドしか呼び出されないので、
継承しているクラスすべてのオーバーライドしているメソッドを呼び出す方法を調べたら
super()を下記のように使えばいいということがわかりましたが、いまいちsuper()の仕様がわかりません。
##試してみたコード
python
1class greeting: 2 country=None 3 def morning(self):pass 4 5class jp_greeting(greeting): 6 def __init__(self): 7 self.country="japan" 8 def morning(self): 9 print("おはよう.") 10 super(jp_greeting,self).morning() 11 12class en_greeting(greeting): 13 def __init__(self): 14 self.country="america" 15 def morning(self): 16 print("good morning.") 17 super(en_greeting,self).morning() 18 19class de_greeting(greeting): 20 def __init__(self): 21 super(de_greeting,self).country="germany" 22 def morning(self): 23 print("guten tag.") 24 25class myGreeting(jp_greeting,en_greeting,de_greeting): 26 def __init__(self): 27 self.country="" 28 def morning(self): 29 super(myGreeting,self).morning() 30myGreeting().mornig()
##試したこと
0. 最後の呼び出しをsuper(myGreeting,myGreeting).mornig(myGreeting())
にしても、得られる結果は同じでした。
0. en_greettingクラスのsuper(en_greeting,self).morning()
をsuper(jp_greeting,self).morning()
にしたら永続ループしました。
0. 今度はsuper(de_greeting,self).morning()
に変えたら、de_greetingのmorning()は呼び出されませんでした。
###予想
uper(superClass,class)はclassでsuperClassの次に継承されているクラスを指定する。
だから、superClassはメソッドを呼び出しているクラスにすると継承した順に呼び出される。
でも、これでは1.の動きを説明できません。
回答1件
あなたの回答
tips
プレビュー