Interfaces

Gevorderde objectgeoriënteerde programmering in Python

Jake Roach

Data Engineer

Interfaces

Een speciaal soort klasse met alleen abstracte methoden die een contract vormt met de klassen die de interface implementeren

  • Abstracte methoden zijn vereist
  • Skelet van methode-definities
  • Parameters hoeven niet te matchen
  • Formeel of informeel

$$

$$

We beginnen met informele interfaces!

Een diagram van een Python-interface met drie abstracte methoden.

Gevorderde objectgeoriënteerde programmering in Python

Informele interfaces met 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
  • Abstracte methoden assign_homework() en grade_assignment()
Gevorderde objectgeoriënteerde programmering in Python

Informele interfaces met 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...
Gevorderde objectgeoriënteerde programmering in Python

Formele interfaces met 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

Hoe verschillen formele interfaces van abstracte basisklassen?

Gevorderde objectgeoriënteerde programmering in Python

Interfaces vs. abstracte basisklassen

Interfaces

  • Definiëren een "contract" met klassen die ze implementeren
  • "Moet-doen"
  • Formeel en informeel
  • Bevatten alleen abstracte methoden (geen concrete)
  • Bijna identieke klassen

Abstracte basisklassen

  • Maken een "blauwdruk" voor klassen met gedeelde kenmerken
  • "Is-een"
  • Meestal alleen formeel
  • Mix van abstracte en concrete methoden
  • Klassen die vergelijkbaar aanvoelen
Gevorderde objectgeoriënteerde programmering in Python

Een formele interface implementeren

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")
Gevorderde objectgeoriënteerde programmering in Python

Een formele interface niet volledig implementeren

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
Gevorderde objectgeoriënteerde programmering in Python

Laten we oefenen!

Gevorderde objectgeoriënteerde programmering in Python

Preparing Video For Download...