You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类初始化报错:TypeError: Guerrier.__init__缺失armure参数

问题:多重继承类实例化时触发TypeError错误

我是编程新手,编写了一段包含Personnage、Guerrier、Mage、GuerrierMage类的Python代码,在创建GuerrierMage实例时触发TypeError,提示Guerrier.__init__() missing 1 required positional argument: 'armure'。尝试使用ChatGPT解决该问题但未成功,现请求帮助定位并修复错误。

原代码及报错信息

原代码

class Personnage:
    def __init__(self, nom, sexe, couleur, pdv, experience):
        self.nom = nom
        self.sexe = sexe
        self.couleur = couleur
        self.pdv = pdv
        self.experience = experience

    def attaquer(self):
        print(f"{self.nom} attaque l'ennemi.")

    def seDefendre(self):
        print(f"{self.nom} se defend contre l'attaque ennemie.")


class Guerrier(Personnage):
    def __init__(self, nom, sexe, couleur, pdv, experience, force, armure):
        super().__init__(nom, sexe, couleur, pdv, experience)
        self.force = force
        self.armure = armure

    def attaquer(self):
        print(f"{self.nom} assene un puissant coup avec sa force de {self.force}.")

    def seDefendre(self):
        print(f"{self.nom} se protege avec son armure de {self.armure}.")


class Mage(Personnage):
    def __init__(self, nom, sexe, couleur, pdv, experience, intelligence, sorts):
        super().__init__(nom, sexe, couleur, pdv, experience)
        self.intelligence = intelligence
        self.sorts = sorts

    def lancer_sort(self):
        print(f"{self.nom} lance un sort puissant avec son intelligence.")

class GuerrierMage(Guerrier, Mage):
    def __init__(self, nom, sexe, couleur, pdv, experience, force, armure):
        Guerrier.__init__( nom, sexe, couleur, pdv, experience, force, armure)
        Mage.__init__( nom, sexe, couleur, pdv, experience,intelligence,sorts)


# Creation d'une instance de la classe GuerrierMage
guerriermage1 = GuerrierMage("GuerrierMage1", "masculin", "rouge", 100, 10, 8, "arrmure")

报错信息

Traceback (most recent call last):
  File "C:\Users\Bureau\code.py", line 45, in <module>
    guerriermage1 = GuerrierMage("GuerrierMage1", "masculin", "rouge", 100, 10, 8, "arrmure")
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Bureau\code.py", line 40, in __init__
    Guerrier.__init__( nom, sexe, couleur, pdv, experience, force, armure)
TypeError: Guerrier.__init__() missing 1 required positional argument: 'armure'

错误定位

  1. 调用父类构造函数未传self:直接调用Guerrier.__init__()和Mage.__init__()时,必须将当前实例的self作为第一个参数传入,否则Python无法识别要初始化的对象,导致参数数量不匹配。
  2. Mage构造函数参数未定义:Mage.__init__()中的intelligence和sorts是未定义的变量,且GuerrierMage的构造函数也没有接收这两个参数,无法完成Mage类的初始化。
  3. 拼写错误:实例化时传入的"arrmure"是拼写错误,应为"armure"。

修复方案

步骤1:修正父类构造函数调用

在调用Guerrier和Mage的构造函数时,显式传入self作为第一个参数。

步骤2:完善GuerrierMage的构造函数

添加intelligence和sorts参数,并传入Mage的构造函数中。

步骤3:修正拼写错误

将实例化时的"arrmure"改为"armure"。

修复后完整代码

class Personnage:
    def __init__(self, nom, sexe, couleur, pdv, experience):
        self.nom = nom
        self.sexe = sexe
        self.couleur = couleur
        self.pdv = pdv
        self.experience = experience

    def attaquer(self):
        print(f"{self.nom} attaque l'ennemi.")

    def seDefendre(self):
        print(f"{self.nom} se defend contre l'attaque ennemie.")


class Guerrier(Personnage):
    def __init__(self, nom, sexe, couleur, pdv, experience, force, armure):
        super().__init__(nom, sexe, couleur, pdv, experience)
        self.force = force
        self.armure = armure

    def attaquer(self):
        print(f"{self.nom} assene un puissant coup avec sa force de {self.force}.")

    def seDefendre(self):
        print(f"{self.nom} se protege avec son armure de {self.armure}.")


class Mage(Personnage):
    def __init__(self, nom, sexe, couleur, pdv, experience, intelligence, sorts):
        super().__init__(nom, sexe, couleur, pdv, experience)
        self.intelligence = intelligence
        self.sorts = sorts

    def lancer_sort(self):
        print(f"{self.nom} lance un sort puissant avec son intelligence.")

class GuerrierMage(Guerrier, Mage):
    def __init__(self, nom, sexe, couleur, pdv, experience, force, armure, intelligence, sorts):
        # 显式传入self参数
        Guerrier.__init__(self, nom, sexe, couleur, pdv, experience, force, armure)
        Mage.__init__(self, nom, sexe, couleur, pdv, experience, intelligence, sorts)


# 修正拼写错误,并传入intelligence和sorts参数
guerriermage1 = GuerrierMage("GuerrierMage1", "masculin", "rouge", 100, 10, 8, "armure", 15, ["Boule de feu", "Invisibilité"])

# 测试方法调用
guerriermage1.attaquer()
guerriermage1.seDefendre()
guerriermage1.lancer_sort()

额外优化(可选)

对于Python多重继承,推荐使用super()来自动处理MRO(方法解析顺序),避免重复初始化父类。可以将GuerrierMage的构造函数改为:

class GuerrierMage(Guerrier, Mage):
    def __init__(self, nom, sexe, couleur, pdv, experience, force, armure, intelligence, sorts):
        super().__init__(nom, sexe, couleur, pdv, experience, force, armure)
        # 由于MRO中Guerrier已经调用了Personnage的__init__,这里直接初始化Mage的独有属性即可
        self.intelligence = intelligence
        self.sorts = sorts

内容的提问来源于stack exchange,提问作者Annie térébinthe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:57:02