Python的同名和继承方法

rec*_*gle 3 python methods inheritance class

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

在这个例子中,调用go on Base将打印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.
Run Code Online (Sandbox Code Playgroud)

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

agf*_*agf 7

这绝对是一件好事.你在寻找什么super().

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

    def go(self):
        self.A = self.A * 2
        super(Child, self).go()
Run Code Online (Sandbox Code Playgroud)

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

编辑:super()适用于新风格的课程,无论如何都应该使用.只需声明任何不继承自另一个的类继承自object:

class Base(object):
Run Code Online (Sandbox Code Playgroud)

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