正好刚学到这里,也正好刚解答了一个网上类似的问题。
就像其他帖子里说的,提示里已经说明了是你所传实参数目和给定形参数目不匹配造成的。
我可以还原一个比较常犯的错误代码案例:
# 父类
class Car():
"""Simulate a car"""
def __init__(self,make,model,year):
---snip---
# 子类
class ElectricCar(Car):
"""Simulate an electric car"""
def __init__(self,make,model,year,xyz):
super().__init__(make,model,year)
self.xyz = 0
如果你运行这段代码,也会提示几乎一样的错误。
可以看出,他的初始目的应该是ElectricCar类继承Car类,并添加一个新的属性xyz,赋默认值为0。这个逻辑没有问题,但是他写的方式有问题。
这种情况只有2种写法:
def __init_(self,make,model,year,xyz=0):
super().__init__(make,model,year)
self.xyz = xyz
或
def __init_(self,make,model,year):
super().__init__(make,model,year)
self.xyz = 0
也就是说,如果你像通过self.xyz = 0给新增的xyz属性赋默认值0,那么括号里就不要添加形参xyz,不然会多算一个形参;而如果你想在括号里直接赋值,那么下面就写成self.xyz = xyz。
保持括号里的和下面的始终都表示同一个形参而非两个。问题就解决了。
感谢季同学和我的讨论,这是能快速总结出上述情形的直接原因,虽然你不玩知乎也看不到。