Python的同名和继承方法
发布时间:2020-12-20 11:19:58 所属栏目:Python 来源:网络整理
导读:我有一个奇怪的问题,看到真实的背景相当复杂,我做了一个简单的例子.我有两个类Base和Child.每个共享一个同名的方法去.我希望Child类能够做的是从Base继承go方法.但是,当我在Child上调用go方法时,我希望它做一些事情(在这种情况下,将属性A乘以2),然后调用它继
我有一个奇怪的问题,看到真实的背景相当复杂,我做了一个简单的例子.我有两个类Base和Child.每个共享一个同名的方法去.我希望Child类能够做的是从Base继承go方法.但是,当我在Child上调用go方法时,我希望它做一些事情(在这种情况下,将属性A乘以2),然后调用它继承自Base的go方法.
在这个例子中,调用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. 我知道这样做通常不是一个好主意(因为它可能会令人困惑),但是在我正在做的事情的背景下,这是有道理的. 解决方法
这绝对是一件好事.你要找的是
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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |