You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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个自然就触发报错了。

解决方案

  1. 检查并修正缩进
    确保子类的__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
    
  2. 核对实例化的参数数量
    你提到“需要传入7个参数”,这里可能是把self也算进去了——self是Python自动传递给类方法的,不需要手动传入。子类ComputerGame__init__方法(除self外)需要6个参数,实例化时应该传6个,比如:

    my_game = ComputerGame("Mario Odyssey", "CG-001", 59.99, 6, "Platformer", "Nintendo Switch")
    
  3. 推荐用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

火山引擎 最新活动