Python继承类报错:takes 4 positional arguments but 5 were given
问题修复说明
报错原因
你的Developer子类构造函数名称写错了——Python要求类的构造函数必须是__init__(前后各两个下划线),但你写成了init。因为没有正确定义子类的构造函数,Python会自动调用父类Employee的__init__方法,而父类的__init__只接受name, email, role三个参数(加上默认的self共4个),但你创建Developer实例时传了4个参数(加上self共5个),所以触发参数不匹配的报错。
修复后的代码
class Employee: location = "Riverside, CA" def __init__(self, name, email, role): self.name = name self.email = email self.role = role def get_info(self): print("Name: {0}, Email: {1}, Role: {2}".format(self.name, self.email, self.role)) class Developer(Employee): # 修正构造函数名称为__init__ def __init__(self, name, email, role, language): super().__init__(name, email, role) self.language = language # 可选:更新get_info,显示编程语言信息 def get_info(self): print("Name: {0}, Email: {1}, Role: {2}, Language: {3}".format(self.name, self.email, self.role, self.language)) employee_1 = Developer("Mickey Mouse", "mmouse@disney.com", "Lead Character", "Python") employee_2 = Developer("Donald Duck", "dduck@disney.com", "Bad character", "FORTRAN") # 测试调用 employee_1.get_info() employee_2.get_info()
额外说明
修复构造函数后,子类就能正确接收language参数并初始化。另外建议更新Developer的get_info方法,把新增的language属性也打印出来,这样子类的特有属性才能被展示。
内容的提问来源于stack exchange,提问作者Film Isaiah
相关产品推荐
相关产品推荐

