Calling a parent's parent's method, which

2019-02-03 03:56发布

How do you call a method more than one class up the inheritance chain if it's been overridden by another class along the way?

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?

2条回答
forever°为你锁心
2楼-- · 2019-02-03 03:57

If you always want Grandfather#do_thing, regardless of whether Grandfather is Father's immediate superclass then you can explicitly invoke Grandfather#do_thing on the Son self object:

class Son(Father):
    # ... snip ...
    def do_thing(self):
        Grandfather.do_thing(self)

On the other hand, if you want to invoke the do_thing method of Father's superclass, regardless of whether it is Grandfather you should use super (as in Thierry's answer):

class Son(Father):
    # ... snip ...
    def do_thing(self):
        super(Father, self).do_thing()
查看更多
手持菜刀,她持情操
3楼-- · 2019-02-03 04:03

You can do this using:

class Son(Father):
    def __init__(self):
        super(Son, self).__init__()

    def do_thing(self):
        super(Father, self).do_thing()
查看更多
登录 后发表回答