如何在python中引用父方法?

时间:2012-02-19 07:04:28

标签: python inheritance polymorphism

假设我有两个类(一个是父类,一个是子类)。如果方法也在子类中定义不同,我如何引用父类中的方法?

以下是代码:

class A:
    def __init__(self, num):
        self.value=num
    def f(self, num):
        return self.value+2
class B(A):
    def f(self, num):
        return 7*self.f(num)

在最后一行中,我想用" self.f(num)"来引用父类A.命令,而不是B中创建无限递归的方法本身。提前谢谢。

7 个答案:

答案 0 :(得分:38)

使用super

return 7 * super(B, self).f(num)

或者在python 3中,它只是:

return 7 * super().f(num)

答案 1 :(得分:34)

如果您知道要使用A,您也可以这样明确地引用A:

class B(A):
    def f(self,num): 
        return 7 * A.f(self,num)

记住你必须明确地给成员函数A.f()

提供self参数

答案 2 :(得分:6)

与其他答案一致,有多种方法可以调用超类方法(包括构造函数),但是在Python-3.x中,这个过程已经简化了:

<强> Python的2.x的

class A(object):
 def __init__(self):
   print "world"

class B(A):
 def __init__(self):
   print "hello"
   super(B, self).__init__()

<强> Python的3.x的

class A(object):
 def __init__(self):
   print "world"

class B(A):
 def __init__(self):
   print "hello"
   super().__init__()
根据{{​​3}},

super()现在相当于super(<containing classname>, self)

答案 3 :(得分:2)

为什么不保持简单?

class B(A):
    def f(self, num):
        return 7 * A.f(self, num)

答案 4 :(得分:1)

class B(A):
    def f(self, num):
        return 7 * super(B, self).f(num)

答案 5 :(得分:0)

你可以使用超级或者你可以更明确地做这样的事情。

class B(A):
  def f(self, num):
    return 7 * A.f(self, num)

答案 6 :(得分:0)

Call a parent class's method from child class in Python?查看我的答案。

这里的一些其他人(不使用超级)会稍微扭曲一下。