Explication de la leçon
super()Après cette leçon, tu seras capable de :
super().__init__(...) pour initialiser l'état d'instance hérité avant d'ajouter de nouveaux attributs.super().method(...) au lieu de copier sa logique.L'héritage permet à une classe de réutiliser le comportement d'une autre. Indique la classe parente entre parenthèses :
class Job:
pass
class SpecialJob(Job):
passUne sous-classe hérite des méthodes et attributs accessibles de son parent. Elle peut également définir ses propres attributs et méthodes. Lorsque la sous-classe définit un __init__, l'initialiseur du parent n'est pas automatiquement appelé. Appelle super().__init__(...) pour établir les attributs du parent avant d'en ajouter de nouveaux.
L'assistant super() permet également à une méthode d'instance qui redéfinit un comportement d'appeler l'implémentation du parent. Cela évite de dupliquer un comportement de base fonctionnel. La prochaine leçon portera en détail sur la redéfinition de méthodes et le polymorphisme ; pour l'instant, n'utilise une redéfinition que lorsqu'elle doit étendre ce que le parent fait déjà.
Une sous-classe peut appeler une méthode parente même lorsqu'elle ne définit pas elle-même cette méthode.
class Device:
def __init__(self, identifier):
self.identifier = identifier
def label(self):
return f"Device {self.identifier}"
class Laptop(Device):
pass
print(Laptop("A14").label())Sortie :
Device A14Laptop a hérité de la méthode label() de Device.
Utilise super().__init__ pour conserver la configuration du parent intacte.
class Account:
def __init__(self, owner):
self.owner = owner
class PremiumAccount(Account):
def __init__(self, owner, credits):
super().__init__(owner)
self.credits = credits
print(f"{PremiumAccount('Noor', 50).owner}: premium")Sortie :
Noor: premiumLe parent crée owner ; l'enfant ajoute credits.
super()L'enfant peut réutiliser le résultat d'un parent et y ajouter ses propres informations.
class Message:
def __init__(self, text):
self.text = text
def summary(self):
return self.text
class UrgentMessage(Message):
def summary(self):
return f"URGENT: {super().summary()}"
print(UrgentMessage("Restart required").summary())Sortie :
URGENT: Restart requiredLa méthode redéfinie appelle la méthode du parent, plutôt que de réécrire son comportement.
Les méthodes héritées peuvent être appelées sur différentes sous-classes ou instances parentes.
class Counter:
def __init__(self, value):
self.value = value
def double(self):
return self.value * 2
class LabeledCounter(Counter):
def __init__(self, value, label):
super().__init__(value)
self.label = label
print(LabeledCounter(7, "items").double())Sortie :
14La sous-classe ajoute label sans perdre la méthode double() du parent.
| Objectif | Python |
|---|---|
| Hériter d'un parent | class Child(Parent): |
| Exécuter l'initialiseur du parent | super().__init__(...) |
| Étendre une méthode parente | super().method(...) |
| Conserver le comportement parent inchangé | Ne pas redéfinir cette méthode |
__init__ enfant en oubliant d'initialiser les attributs du parent.self manuellement à super().__init__.super().