Héritage multiple

Programmation orientée objet intermédiaire en Python

Jake Roach

Data Engineer

Héritage multiple

Permet à une classe d'hériter des fonctionnalités de plusieurs classes

  • Intern peut hériter à la fois de Employee et de Student
  • Conserve une relation « est-un »

Une classe Intern héritant des classes Employee et Student.

class Employee:
  def __init__(self, department):
    self.department = department

  def begin_job(self):
    print(f"Welcome to {self.department}!")
class Student:
  def __init__(self, school):
    self.school = school
    self.courses = []

  def add_course(self, course_name):
    self.courses.append(course_name)
Programmation orientée objet intermédiaire en Python

Héritage multiple

class Intern(Employee, Student):
    def __init__(self, department, school, duration):
        # Appel aux DEUX constructeurs
        Employee.__init__(self, department)
        Student.__init__(self, school)
        self.duration = duration

    def onboard(self, mentor):
        # Implémentation d'une nouvelle méthode
        ...
Programmation orientée objet intermédiaire en Python

Créer un objet Intern

stephen = Intern("Software Development", "Echo University", 10)
stephen.begin_job()  # Méthode de Employee
Welcome to Software Development!
stephen.add_course("Intermediate OOP in Python")  # Méthode de Intern
print(stephen.courses)
["Intermediate OOP in Python"]
Programmation orientée objet intermédiaire en Python

Héritage multiniveau

Hériter d'une classe qui hérite elle‑même d'une autre classe : on devient le petit‑enfant

  • Conserver une relation « est-un »

Graphique illustrant l'héritage multiniveau.

class Person:
  def __init__(self, name):
    self.name = name

  def introduce(self):
      print(f"Hello, my name is {self.name}")
class Employee(Person):
  def __init__(self, name, title):
    Person.__init__(self, name)
    self.title = title

  def change_position(self, new_title):
    print(f"Starting new role as {new_title}")
    self.title = new_title
Programmation orientée objet intermédiaire en Python

Héritage multiniveau

class Manager(Employee):
  def __init__(self, name, title, number_reports):
    Employee.__init__(self, name, title)
    self.number_reports = number_reports

    mike = Manager("Mike", "Engineering Manager", 14)
mike.introduce()
mike.change_position("Director of Engineering")
print(mike.number_reports)
Hello, my name is Mike
Starting new role as Director of Engineering
14
Programmation orientée objet intermédiaire en Python

Ordre de résolution des méthodes (MRO)

L'ordre selon lequel Python détermine quelle méthode utiliser quand parent et enfants implémentent une méthode du même nom

Suivez ces règles pour déterminer le MRO :

  • Recherche d'abord dans les classes enfants
  • Les parents sont cherchés de gauche à droite, selon l'ordre défini dans la déclaration de classe

$$

Méthode .mro() et __mro__

Classe enfant héritant de plusieurs classes parentes.

1 Beyond the Basic Stuff with Python, Sweigart (p. 311)
Programmation orientée objet intermédiaire en Python

Ordre de résolution des méthodes (MRO)

class Intern(Employee, Student):  # Intern hérite des classes Employee et Student
  ...

# Trouver le MRO d'Intern
print(Intern.mro())
[<class '__main__.Intern'>, <class '__main__.Employee'>, <class '__main__.Student'>, <class 'object'>]
# Trouver le MRO avec __mro__
print(Intern.__mro__)
(<class '__main__.Intern'>, <class '__main__.Employee'>, <class '__main__.Student'>, <class 'object'>)
Programmation orientée objet intermédiaire en Python

Passons à la pratique !

Programmation orientée objet intermédiaire en Python

Preparing Video For Download...