我正在尝试使用Python中的一个简单示例来教我自己的继承,但我似乎无法掌握基础知识。我正在尝试使用MathOps类中定义的add函数并在Inherited类中使用它。我错过了什么?
def main():
result = Inherited(2,4)
print result.add()
class MathOps:
def __init__(self,a,b):
self.a = a
self.b = b
def add(self):
sum = self.a + self.b
return sum
def multiply(self):
product = self.a * self.b
return product
class Inherited(MathOps):
def __init__(self,a,b):
self.add()
return sum
if __name__ == '__main__':
main()
答案 0 :(得分:2)
您的代码存在两个问题,均采用Inherited.__init__
方法。
首先,您未将self.add()
的结果分配给任何内容,因此您尝试稍后返回的sum
变量未定义。您需要使用sum = self.add()
或将代码缩减为一个语句:return self.add()
第二个问题是Inherited.__init__
没有任何意义。您将返回一个值,该值将被忽略(__init__
通常不会返回任何内容)。此外,您没有调用基类的__init__
方法,因此self.a
和self.b
永远不会被正确设置(这意味着self.add()
赢得了&Inherited.__init__
#39;实际上是功能)。
这是一个修改过的版本,它实际上在class Inherited(MathOps):
def __init__(self, a, b):
super(Inherited, self).__init__(a, b) # call base class __init__
self.sum = self.add() # assign return value from add to an attribute
# don't return anything from __init__
方法中做了一些有意义的事情(如果不是非常有用):
val = Inherited(2, 4)
print val.sum # prints the sum that was calculated in __init__
现在,您可以像这样使用它:
{{1}}
答案 1 :(得分:0)
你的问题在这里:
def __init__(self,a,b):
self.add()
return sum
不要从__init__
返回,这意味着Inherited(...)
的结果是整数而不是Inherited
的实例。另外,如果您使用的是2.7,请确保使用新式类(即MathOps(object)
)。