Python的同名和继承方法

时间:2011-08-09 21:18:07

标签: python class inheritance methods

我有一个奇怪的问题,看到真正的背景相当复杂,我做了一个简单的例子。我有两个课程基础儿童。每个人共享一个同名的方法。我希望 Child 类能够从 Base 继承 go 方法。但是,当我在孩子上调用 go 方法时,我希望它做一些事情(在这种情况下,将属性 A 乘以2),然后调用从 Base 继承的 go 方法。

在此示例中,在 Base 上调用 go 将打印35,而我希望 Child 打印70.

class Base :
    def __init__ (self) :
        self.A = 35

    def go (self) :
        print self.A


class Child (Base) :
    def __init__ (self) :
        Base.__init__(self)

    def go (self) :
        self.A = self.A * 2

        # Somehow call Base's **go** method, which would print 70.

我理解这样做通常不是一个好主意(因为它可能会令人困惑),但是在我正在做的事情的背景下这是有道理的。

1 个答案:

答案 0 :(得分:7)

这绝对是一件好事。您正在寻找的是super()

class Child (Base):
    def __init__ (self):
        super(Child, self).__init__()

    def go(self):
        self.A = self.A * 2
        super(Child, self).go()

在Python 3中,你可以不带参数使用它,因为它会自动检测到正确的。

编辑:super()适用于新式课程,无论如何都要使用。只要声明任何不继承自另一个的类继承自object

class Base(object):

此外,括号前后的所有额外空格都不被视为良好的python样式,请参阅PEP8