Python中的基本继承?

时间:2014-06-06 02:34:28

标签: python function class inheritance

我正在尝试使用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()

2 个答案:

答案 0 :(得分:2)

您的代码存在两个问题,均采用Inherited.__init__方法。

首先,您未将self.add()的结果分配给任何内容,因此您尝试稍后返回的sum变量未定义。您需要使用sum = self.add()或将代码缩减为一个语句:return self.add()

第二个问题是Inherited.__init__没有任何意义。您将返回一个值,该值将被忽略(__init__通常不会返回任何内容)。此外,您没有调用基类的__init__方法,因此self.aself.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))。