发出在父类上调用方法的问题

时间:2016-06-16 13:23:28

标签: python inheritance

我是Python类的新手,并试图理解继承的概念。我有一个名为Math的类,它继承自Calc。从Math.product()开始,我尝试调用基类方法mul(),如下所示:

class Calc(object):
    def mul(a, b):
        return a * b

class Math(Calc):
    def product(self, a, b):
        return super(Math, self).mul(a, b)

if __name__ == "__main__":  
    m = Math()
    print "Product:", m.product(1.3, 4.6)

当我运行代码时,我收到了以下错误,但就我所知,我只在mul()内传递了Math.product(a,b)的两个参数。有人能说清楚我犯了什么错误吗?

Product:
Traceback (most recent call last):
File "inheritance.py", line 14, in <module>
print "Product:", m.product(1.3, 4.6)
File "inheritance.py", line 9, in product
return super(Math, self).mul(a, b)
TypeError: mul() takes exactly 2 arguments (3 given)

1 个答案:

答案 0 :(得分:8)

您需要在{/ p>中添加self作为参数

class Calc(object):
    def mul(a, b):
        return a * b

或者使用staticmethod装饰者。

例如:

class Calc(object):
    @staticmethod
    def mul(a, b):
        return a * b

现在,当你致电super(Math, self).mul(a, b)时,它按顺序传递以下参数,self, a, b。无论何时在类(点方法)上调用方法,它都会隐式传递self作为第一个参数。

staticmethod装饰器告诉函数它不会对类的特定实例进行操作,因此无需传递self