La fonction super()
Fait partie de la section Object Oriented Programming du Journey Python de Coddy — leçon 18 sur 64.
La fonction super() permet à une classe enfant d'appeler des méthodes de sa classe parente. Cela vous permet d'étendre les fonctionnalités parentes plutôt que de les remplacer complètement.
Voici un exemple d'utilisation de super() dans le constructeur :
class Animal:
def __init__(self, name):
self.name = name
print(f"Animal created: {name}")
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name) # Appelle le __init__ du parent
self.breed = breed
print(f"Dog breed set: {breed}")Créez un objet chien :
buddy = Dog("Buddy", "Golden Retriever")
print(f"Name: {buddy.name}, Breed: {buddy.breed}")Sortie :
Animal created: Buddy
Dog breed set: Golden Retriever
Name: Buddy, Breed: Golden RetrieverUtilisez super() pour étendre les méthodes parentes :
class Animal:
def make_sound(self):
print("Generic animal sound")
class Dog(Animal):
def make_sound(self):
super().make_sound() # Appeler d'abord la méthode du parent
print("Woof!") # Ajouter un comportement spécifique au chienAppelez la méthode étendue :
buddy = Dog()
buddy.make_sound()Sortie :
Generic animal sound
Woof!Sans super(), vous perdriez la fonctionnalité du parent :
class Cat(Animal):
def make_sound(self):
print("Meow!") # Uniquement le cri du chat, la méthode parente est ignorée
cat = Cat()
cat.make_sound()Sortie :
Meow!Point clé : utilisez super() pour appeler les méthodes de la classe parente à partir des classes enfants. Cela vous permet d'étendre les fonctionnalités plutôt que de les remplacer complètement. Les utilisations courantes incluent l'appel des méthodes __init__ parentes et l'extension du comportement parent.
Défi
MoyenDans ce défi, vous allez implémenter une hiérarchie de classes Person et Employee en utilisant l'héritage.
person.py: Contient la classe Person avec les attributs name et ageemployee.py: Contient la classe Employee qui hérite de Persondriver.py: Fichier principal pour tester votre implémentation
Chaque fichier contient des commentaires TODO détaillés pour vous guider tout au long de l'implémentation.
Aide-mémoire
La fonction super() permet à une classe enfant d'appeler des méthodes de sa classe parente, étendant ainsi la fonctionnalité plutôt que de la remplacer.
Utilisation de super() dans les constructeurs :
class Animal:
def __init__(self, name):
self.name = name
class Dog(Animal):
def __init__(self, name, width):
super().__init__(name) # Appelle le __init__ du parent
self.breed = breedUtilisation de super() pour étendre des méthodes :
class Animal:
def make_sound(self):
print("Generic animal sound")
class Dog(Animal):
def make_sound(self):
super().make_sound() # Appelle d'abord la méthode du parent
print("Woof!") # Ajoute un comportement spécifique à l'enfantSans super() : Les méthodes de l'enfant remplacent complètement la fonctionnalité du parent au lieu de l'étendre.
Essayez vous-même
# TODO : Importer la classe Person depuis person.py
# TODO : Importer la classe Employee depuis employee.py
def main():
# TODO : Créer un objet Person avec le nom "Alice" et l'âge 30
person = None
# TODO : Créer un objet Employee avec le nom "Bob", l'âge 35 et le poste "Developer"
employee = None
# TODO : Appeler la méthode introduce() sur l'objet Person
# Résultat attendu : "Hi, I'm Alice and I'm 30 years old"
# TODO : Imprimer une ligne vide pour l'espacement - print()
# TODO : Appeler la méthode introduce() sur l'objet Employee
# Résultat attendu :
# "Hi, I'm Bob and I'm 35 years old"
# "I work as a Developer"
if __name__ == "__main__":
main()Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Object Oriented Programming
1Les fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe paramètre selfMéthodesAttributsMéthode constructeur (__init__)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLa fonction super()Redéfinition de méthodeHéritage multipleOrdre de résolution des méthodesRécapitulatif - Hiérarchie des employés7Méthodes spéciales
Introduction aux méthodes magiquesSurcharge d'opérateursMéthodes magiques de conteneurRécapitulatif - Liste personnalisée10Patrons de conception, Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy2Décorateurs
Introduction aux décorateursDécorateur de propriétéDécorateur de méthode statiqueDécorateur de méthode de classe5Polymorphisme
Retour sur la redéfinition de méthodeDuck TypingClasses et méthodes abstraitesConception d'interfacesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageMixinsMéthodes statiques et de classeDécorateurs de classeGestionnaires de contexte11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Propriétés de classe
Variables d'instance vs variables de classeDécorateurs de propriétéAttributs privésRécapitulatif - Gestionnaire de compte bancaire