途中で別のクラスによってオーバーライドされた場合、継承チェーンで複数のクラスのメソッドをどのように呼び出しますか?
class Grandfather(object):
def __init__(self):
pass
def do_thing(self):
# stuff
class Father(Grandfather):
def __init__(self):
super(Father, self).__init__()
def do_thing(self):
# stuff different than Grandfather stuff
class Son(Father):
def __init__(self):
super(Son, self).__init__()
def do_thing(self):
# how to be like Grandfather?
Grandfather
がFather
の直接のスーパークラスであるかどうかに関係なく、常にGrandfather#do_thing
が必要な場合は、Son
self
オブジェクトでGrandfather#do_thing
を明示的に呼び出すことができます。
class Son(Father):
# ... snip ...
def do_thing(self):
Grandfather.do_thing(self)
一方、Father
であるかどうかに関係なく、Grandfather
のスーパークラスのdo_thing
メソッドを呼び出す場合は、super
を使用する必要があります(ティエリーの回答のように)。
class Son(Father):
# ... snip ...
def do_thing(self):
super(Father, self).do_thing()
これは次の方法で実行できます。
class Son(Father):
def __init__(self):
super(Son, self).__init__()
def do_thing(self):
super(Father, self).do_thing()