Python3中解决子类实例化“too many arguments”错误的方法
解决子类实例化参数错误的问题
嘿,我来帮你搞定这个参数报错的问题!首先咱们拆解下错误提示:too many arguments (7/5) 意思是你实例化时传了7个参数,但被调用的__init__方法只接受5个(其中1个是Python自动传递的self,所以实际只需要4个外部参数)。
最可能的原因
这种情况大概率是你的子类ComputerGame的__init__方法缩进错误了!如果def __init__这一行没有缩进在class ComputerGame(Toy):下面,Python会把它当成全局函数,而非子类的方法。此时子类会默认继承父类Toy的__init__方法,而父类的__init__只需要4个外部参数(name, ID, price, age),你传7个自然就触发报错了。
解决方案
检查并修正缩进
确保子类的__init__方法正确缩进在类定义下方,和类内其他方法保持一致的缩进(通常是4个空格),正确代码示例:class ComputerGame(Toy): def __init__(self,name,ID,price,age,catogory,console): Toy.__init__(self,name,ID,price,age) self.__Catogory = catogory self.__Console = console核对实例化的参数数量
你提到“需要传入7个参数”,这里可能是把self也算进去了——self是Python自动传递给类方法的,不需要手动传入。子类ComputerGame的__init__方法(除self外)需要6个参数,实例化时应该传6个,比如:my_game = ComputerGame("Mario Odyssey", "CG-001", 59.99, 6, "Platformer", "Nintendo Switch")推荐用
super()调用父类构造方法
虽然你用Toy.__init__(self,...)也能正常工作,但更推荐使用super(),它在多继承场景下更灵活,写法也更简洁:class ComputerGame(Toy): def __init__(self,name,ID,price,age,catogory,console): super().__init__(name,ID,price,age) # 不需要手动传self self.__Catogory = catogory self.__Console = console
小提醒
顺便提一句,你代码里的catogory是拼写错误,正确写法是category,虽然这不会影响当前的参数错误,但会影响后续代码的可读性和维护性哦~
内容的提问来源于stack exchange,提问作者Jacob.L




