Abstracte basisklassen

Gevorderde objectgeoriënteerde programmering in Python

Jake Roach

Data Engineer

Abstracte basisklassen

Abstracte basisklassen vormen een blauwdruk door abstracte methods te eisen die alle kinderen moeten implementeren

  • Zorgt voor gemeenschappelijk gedrag binnen een groep klassen
  • @abstractmethod-decorator
  • Bedoeld om te erven, niet te instantieren
  • Niet alle methods hoeven abstract te zijn (concrete methods)
class School:
    # Doe dingen zoals inschrijven 
    # en een vak toevoegen
class MiddleSchool:
    # Speel een instrument, sluit je aan bij een club
    # maar moet inschrijven en vakken toevoegen
class HighSchool:
    # Speel een varsitysport, solliciteer
    # voor college, maar moet inschrijven 
    # en vakken toevoegen
Gevorderde objectgeoriënteerde programmering in Python

Een abstracte basisklasse maken

from abc import ABC, abstractmethod

# Maak een abstracte basisklasse die erft # van ABC class School(ABC): @abstractmethod def enroll(self): # Deze method moet worden geïmplementeerd # in klassen die hiervan erven pass
# Concrete methods worden geërfd def graduate(self): print("Congrats on graduating!")
  • Erf van de ABC-klasse in de abc-module
  • pass
  • Elke klasse die School erft, moet enroll() implementeren
  • Je kunt ook concrete methods toevoegen
Gevorderde objectgeoriënteerde programmering in Python

Abstracte basisklassen implementeren

class HighSchool(School):
    def enroll(self):
        print("Welcome to high school!")

# Maak een instantie van HighSchool
high_school = HighSchool()
high_school.enroll()
Welcome to high school!
high_school.graduate()
Congrats on graduating!
  • HighSchool moet een enroll()-method definiëren
  • TypeError als enroll() niet is gedefinieerd
  • HighSchool erft de graduate()-method
Gevorderde objectgeoriënteerde programmering in Python

Meerdere abstracte methods

class School(ABC):
    @abstractmethod
    def enroll(self):
        pass

    @abstractmethod
    def add_course(self, course_name):
        pass

    def graduate(self):
        print("Congrats on graduating!")

  • Twee abstracte methods: enroll() en add_course()
class HighSchool(School):
    def __init__(self):
        self.courses = []

    # Implementing abstract method
    def enroll(self):
        print("Welcome to high school!")

    # Implementing abstract method
    def add_course(self, course_name):
        self.courses.append(course_name)
        print(f"You enrolled in {course_name}")

Gevorderde objectgeoriënteerde programmering in Python

Laten we oefenen!

Gevorderde objectgeoriënteerde programmering in Python

Preparing Video For Download...