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 plus d'une classe

  • Intern peut hériter de Employee et de Student
  • Maintient 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):
        # Make a call to BOTH constructors
        Employee.__init__(self, department)
        Student.__init__(self, school)
        self.duration = duration

    def onboard(self, mentor):
        # Implementation of a new method
        ...
Programmation orientée objet intermédiaire en Python

Créer un objet Intern

stephen = Intern("Software Development", "Echo University", 10)
stephen.begin_job()  # Method from Employee
Welcome to Software Development!
stephen.add_course("Intermediate OOP in Python")  # Method from 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 déjà d'une autre, devenant ainsi un « petit-enfant »

  • Maintenir 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 dans lequel Python détermine quelle méthode utiliser quand parent et enfants ont une méthode du même nom

Règles à suivre pour déterminer le MRO :

  • Recherche d'abord dans les enfants
  • Recherche des parents de gauche à droite selon l'ordre défini dans la 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 inherits the Employee and the Student classes
  ...

# Find the MRO for Intern
print(Intern.mro())
[<class '__main__.Intern'>, <class '__main__.Employee'>, <class '__main__.Student'>, <class 'object'>]
# Find the MRO using __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...