Interfețe

Programare orientată pe obiecte intermediară în Python

Jake Roach

Data Engineer

Interfețe

Un tip special de clasă alcătuit doar din metode abstracte ce creează un contract cu clasele care implementează interfața

  • Trebuie să definească metode abstracte
  • Schelet de definiții de metode
  • Parametrii nu trebuie să corespundă
  • Formale sau informale

$$

$$

Să începem cu interfețele informale!

Diagramă a unei interfețe Python cu trei metode abstracte.

Programare orientată pe obiecte intermediară în Python

Interfețe informale cu 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
  • assign_homework() și grade_assignment() sunt metode abstracte
Programare orientată pe obiecte intermediară în Python

Interfețe informale cu 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...
Programare orientată pe obiecte intermediară în Python

Interfețe formale cu 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

Cum diferă interfețele formale de clasele de bază abstracte?

Programare orientată pe obiecte intermediară în Python

Interfețe vs. clase de bază abstracte

Interfețe

  • Definesc un „contract" cu clasele care le implementează
  • „Trebuie să facă"
  • Formale și informale
  • Conțin doar metode abstracte (fără metode concrete)
  • Clase aproape identice

Clase de bază abstracte

  • Creează un „model" pentru clase cu caracteristici comune
  • „Este-un"
  • De obicei doar formale
  • Combinație de metode abstracte și concrete
  • Clase cu aspect și comportament similar
Programare orientată pe obiecte intermediară în Python

Implementarea unei interfețe formale

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")
Programare orientată pe obiecte intermediară în Python

Eșecul implementării unei interfețe formale

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
Programare orientată pe obiecte intermediară în Python

Să exersăm!

Programare orientată pe obiecte intermediară în Python

Preparing Video For Download...