同名方法与继承,Python
我有个奇怪的问题,由于背景比较复杂,我做了个简单的例子。我有两个类,分别叫Base和Child。这两个类都有一个同名的方法go。我希望Child类能够继承Base类的go方法。不过,当我在Child上调用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 个回答
13
这样做完全没问题。你需要的就是 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。