TypeError问题咨询:__init__()仅接受4个位置参数却传入7个
解决TypeError: init() takes 4 positional arguments but 7 were given错误
嘿,这个错误的原因很明确——你在实例化类的时候,传递的参数数量和类的__init__方法定义的参数数量不匹配。让我结合你的代码详细拆解:
问题分析
先看你定义的两个类:
Employee的__init__方法只接受3个自定义位置参数(加上Python自动传入的self,总共4个参数):ename,salary,dateOfJoiningQualification的__init__方法同样只接受3个自定义位置参数(加上self共4个):university,degree,passingYear
错误提示里的“7 were given”,说明你在创建实例时,比如尝试创建Employee或者Qualification对象时,一次性传入了6个手动参数(加上自动的self就是7个)——大概率是你把两个类的参数混在一起传给了其中一个类的构造方法,比如写成了这样的错误代码:
# 错误示例:把Qualification的参数也传给了Employee emp = Employee("Ayush", 75000, "2023-05-10", "XYZ University", "B.Tech", 2022)
解决方案
根据你的需求,分两种情况处理:
情况1:分别创建独立的实例
如果你只是想分别创建员工和其资质的独立对象,分开实例化即可:
class Employee(object): def __init__(self, ename, salary, dateOfJoining): self.ename = ename self.salary = salary self.dateOfJoining = dateOfJoining def output(self): print("Ename: ", self.ename, "\nSalary: ", self.salary, "\nDate Of Joining: ", self.dateOfJoining) class Qualification(object): def __init__(self, university, degree, passingYear): self.university = university self.degree = degree self.passingYear = passingYear def qoutput(self): print("Passed out from University:", self.university, "\nDegree:", self.degree, "\nPassing Year:", self.passingYear) # 正确实例化 emp = Employee("Ayush", 75000, "2023-05-10") emp.output() qual = Qualification("XYZ University", "B.Tech", 2022) qual.qoutput()
情况2:让员工关联资质信息
如果你想让Employee对象包含对应的资质信息,可以把Qualification实例作为Employee的一个属性:
class Employee(object): def __init__(self, ename, salary, dateOfJoining, qualification): self.ename = ename self.salary = salary self.dateOfJoining = dateOfJoining self.qualification = qualification # 关联资质实例 def output(self): print("Ename: ", self.ename, "\nSalary: ", self.salary, "\nDate Of Joining: ", self.dateOfJoining) # 同时输出资质信息 self.qualification.qoutput() class Qualification(object): def __init__(self, university, degree, passingYear): self.university = university self.degree = degree self.passingYear = passingYear def qoutput(self): print("Passed out from University:", self.university, "\nDegree:", self.degree, "\nPassing Year:", self.passingYear) # 先创建资质实例,再传给员工 qual = Qualification("XYZ University", "B.Tech", 2022) emp = Employee("Ayush", 75000, "2023-05-10", qual) emp.output()
关键提醒
记住:Python类的__init__方法里,self是不需要你手动传递的——它是Python自动把当前实例对象传进去的。所以你定义的__init__需要3个参数时,你只需要传3个,加上self总共是4个,这就是错误提示里“takes 4 positional arguments”的由来。
内容的提问来源于stack exchange,提问作者Ayush Bherwani
相关产品推荐
相关产品推荐

