Résolue

Utilisation de super() en Python : différences entre les solutions

# Orienté objet # Héritage

Bonjour,

J'ai réalisé un exercice et ne comprends pas pourquoi utiliser la fonction super(), en quoi est-ce que ma solution et celle proposée sont-elles différentes. Merci de m'éclairer ^^

J'ai joint la capture d'écran de l'exercice et les 2 solutions:


Salut,

En fait dans le cas où tu utilises init et self.puissance, tu auras bien un attribut d'instance puissance, unique à chaque instance.

Quand tu fais ça :

class Personnage:
    def __init__(self, nom, prenom):
        self.nom = nom
        self.prenom = prenom

class Magicien(Personnage):
    puissance = 80

class Gobelin(Personnage):
    puissance = 20

class Chevalier(Personnage):
    puissance = 70


p = Magicien("Gandalf", "le Gris")
p2 = Magicien("Gandalf", "le Blanc")
print(p.nom, p.prenom, p.puissance)
print(p2.nom, p2.prenom, p2.puissance)

Tu vas voir que la valeur de l'attribut puissance est la même car partagée entre les instances.

Ici :

class Personnage:
    def __init__(self, nom, prenom):
        self.nom = nom
        self.prenom = prenom

class Magicien(Personnage):
    def __init__(self, nom, prenom, puissance):
        super().__init__(nom, prenom)
        self.puissance = puissance

p = Magicien("Gandalf", "le Gris", 200)
p2 = Magicien("Gandalf", "le Blanc", 300)
print(p.nom, p.prenom, p.puissance)
print(p2.nom, p2.prenom, p2.puissance)

Je passe par un attribut d'instance via le constructeur init. Donc les attributs sont propres à chaque instance.

Et quand tu fais ça :

Tu as bien puissance en attribut d'instance, c'est juste que c'est hardcodé.

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.