Rozhraní

Intermediate Object-Oriented Programming in Python

Jake Roach

Data Engineer

Rozhraní

Speciální typ třídy tvořený pouze abstraktními metodami, který vytváří smlouvu s třídami implementujícími rozhraní

  • Musí definovat abstraktní metody
  • Kostra definic metod
  • Parametry nemusí odpovídat
  • Formální nebo neformální

$$

$$

Začneme neformálními rozhraními!

Diagram pythonového rozhraní se třemi abstraktními metodami.

Intermediate Object-Oriented Programming in Python

Neformální rozhraní s duck typingem

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
  • assign_homework() a grade_assignment() jsou abstraktní metody
Intermediate Object-Oriented Programming in Python

Neformální rozhraní s duck typingem

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...
Intermediate Object-Oriented Programming in Python

Formální rozhraní s ABC a @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

Čím se formální rozhraní liší od abstraktních základních tříd?

Intermediate Object-Oriented Programming in Python

Rozhraní vs. abstraktní základní třídy

Rozhraní

  • Definují „smlouvu" s třídami, které je implementují
  • „Musí dělat"
  • Formální a neformální
  • Obsahují pouze abstraktní metody
  • Téměř identické třídy

Abstraktní základní třídy

  • Vytváří „plán" pro třídy se společnými vlastnostmi
  • „Je-to"
  • Obvykle pouze formální
  • Kombinace abstraktních a konkrétních metod
  • Třídy s podobným vzhledem a chováním
Intermediate Object-Oriented Programming in Python

Implementace formálního rozhraní

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")
Intermediate Object-Oriented Programming in Python

Neúplná implementace formálního rozhraní

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
Intermediate Object-Oriented Programming in Python

Pojďme si procvičit!

Intermediate Object-Oriented Programming in Python

Preparing Video For Download...