我是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)
答案 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
。