Interfaces

Programmation orientée objet intermédiaire en Python

Jake Roach

Data Engineer

Interfaces

Un type spécial de classe composé uniquement de méthodes abstraites qui crée un « contrat » avec les classes qui l'implémentent

  • Doivent définir des méthodes abstraites
  • Squelette de définitions de méthodes
  • Les paramètres n'ont pas à correspondre
  • Formelles ou informelles

$$

$$

Commençons par les interfaces informelles !

Schéma d'une interface Python avec trois méthodes abstraites.

Programmation orientée objet intermédiaire en Python

Interfaces informelles avec duck typing

class Course:
    def assign_homework(self, assignment_number, due_date):
        # Typically, the pass keyword will be used when creating an interface
        pass  

    def grade_assignment(self, assignment_number):
        pass
  • Duck typing
  • Méthodes abstraites assign_homework() et grade_assignment()
Programmation orientée objet intermédiaire en Python

Interfaces informelles avec duck typing

class ProgrammingCourse:
    def __init__(self, course_name):
        self.course_name = course_name

    def assign_homework(self, due_date):
        # Some implementation of assign_homework here...

    def grade_assignment(self, assignment_number):
        # Some implementation of grade_assignment here...
Programmation orientée objet intermédiaire en Python

Interfaces formelles avec ABC, @abstractmethod

from abc import ABC, abstractmethod

class Course(ABC):    
    @abstractmethod
    def assign_homework(self, assignment_number, due_date):
        pass

    @abstractmethod
    def grade_assignment(self, assignment_number):
        pass

En quoi les interfaces formelles diffèrent-elles des classes de base abstraites ?

Programmation orientée objet intermédiaire en Python

Interfaces vs classes de base abstraites

Interfaces

  • Définissent un « contrat » avec les classes qui les implémentent
  • « À faire obligatoirement »
  • Formelles et informelles
  • Ne contiennent que des méthodes abstraites (aucune méthode concrète)
  • Classes quasi identiques

Classes de base abstraites

  • Créent un « plan » pour des classes partageant des caractéristiques
  • « Est un(e) »
  • Généralement seulement formelles
  • Mélange de méthodes abstraites et concrètes
  • Classes qui se ressemblent dans l'usage
Programmation orientée objet intermédiaire en Python

Implémenter une interface formelle

class ProgrammingCourse(Course):
    def __init__(self, course_name):
        self.course_name = course_name

    def assign_homework(self, due_date):
        # Some implementation of assign_homework here...

    def grade_assignment(self, assignment_number):
        # Some implementation of grade_assignment here...

intermediate_oop = ProgrammingCourse("Intermediate Object-Oriented Programming")
Programmation orientée objet intermédiaire en Python

Omettre d'implémenter une interface formelle

class ProgrammingCourse(Course):
    def __init__(self, course_name):
        self.course_name = course_name

    def assign_homework(self, due_date):
        # Some implementation of assign_homework here...

intermediate_oop = ProgrammingCourse("Intermediate Object-Oriented Programming")
 ...
    intermediate_oop = ProgrammingCourse("Intermediate Object-Oriented Programming")
TypeError: Can't instantiate abstract class ProgrammingCourse with abstract method
    grade_assignment
Programmation orientée objet intermédiaire en Python

Passons à la pratique !

Programmation orientée objet intermédiaire en Python

Preparing Video For Download...