Abstrakta basklasser

Objektorienterad programmering i Python – fortsättningskurs

Jake Roach

Data Engineer

Abstrakta basklasser

Abstrakta basklasser skapar en mall för klasser genom att definiera abstrakta metoder som alla underklasser måste implementera

  • Säkerställer gemensamt beteende för en grupp klasser
  • Dekoratorn @abstractmethod
  • Avsedda att ärvas, inte instansieras
  • Inte alla metoder i en abstrakt basklass behöver vara abstrakta (konkreta metoder)
class School:
    # Do things such as enroll 
    # and add a course
class MiddleSchool:
    # Play an instrument, join a club
    # but must enroll and add courses
class HighSchool:
    # Play a varsity sport, apply
    # for college, but must enroll 
    # and add courses
Objektorienterad programmering i Python – fortsättningskurs

Skapa en abstrakt basklass

from abc import ABC, abstractmethod

# Create an abstract base class that inherits # from ABC class School(ABC): @abstractmethod def enroll(self): # This method must be implemented # in classes that inherit from it pass
# Concrete methods are inherited def graduate(self): print("Congrats on graduating!")
  • Ärver från klassen ABC i modulen abc
  • pass
  • Alla klasser som ärver School måste implementera metoden enroll()
  • Kan även implementera konkreta metoder
Objektorienterad programmering i Python – fortsättningskurs

Implementera abstrakta basklasser

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

# Create an instance of HighSchool
high_school = HighSchool()
high_school.enroll()
Welcome to high school!
high_school.graduate()
Congrats on graduating!
  • HighSchool måste definiera en enroll()-metod
  • TypeError om enroll() inte är definierad
  • HighSchool ärver metoden graduate()
Objektorienterad programmering i Python – fortsättningskurs

Flera abstrakta metoder

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

    @abstractmethod
    def add_course(self, course_name):
        pass

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

  • Två abstrakta metoder: enroll() och 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}")

Objektorienterad programmering i Python – fortsättningskurs

Nu kör vi en övning!

Objektorienterad programmering i Python – fortsättningskurs

Preparing Video For Download...