Python继承 - 如何调用grandparent方法?

时间:2017-03-25 13:09:07

标签: python

考虑以下代码:

class A:
  def foo(self):
    return "A"

class B(A):
  def foo(self):
    return "B"

class C(B):
  def foo(self):
    tmp = ... # call A's foo and store the result to tmp
    return "C"+tmp

应该写什么代替...,以便调用班级foo中的祖父母方法A?我尝试了super().foo(),但它只调用了类foo中的父方法B

我使用的是Python 3。

4 个答案:

答案 0 :(得分:10)

有两种方法可以解决这个问题:

要么你可以像其他人所建议的那样明确地使用A.foo(self)方法 - 当你想要调用A类的方法而不管A是否是B的父类时使用它:

class C(B):
  def foo(self):
    tmp = A.foo(self) # call A's foo and store the result to tmp
    return "C"+tmp

或者,如果你想使用B的父类的.foo()方法,无论父类是否为A,那么使用:

class C(B):
  def foo(self):
    tmp = super(B, self).foo() # call B's father's foo and store the result to tmp
    return "C"+tmp

答案 1 :(得分:1)

您可以明确地从祖父母类中调用该方法:

class C(B):
    def foo(self):
       tmp = A.foo()
       return "C" + tmp

答案 2 :(得分:1)

你可以简单地明确一下这门课程。 super()允许您隐含关于父级,自动解析Insert text from a text box into and Access 2010 DataBase using VB.Net,但没有其他任何特殊之处。

class C(B):
    def foo(self):
       tmp = A.foo(self)
       return "C"+tmp

答案 3 :(得分:1)

Calling a parent's parent's method, which has been overridden by the parent 这个讨论已经解释了如何回到树上。