Utilisation de super() en Python : différences entre les 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 !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte


