Абстрактні базові класи

Середній рівень об'єктно-орієнтованого програмування в Python

Jake Roach

Data Engineer

Абстрактні базові класи

Абстрактні базові класи задають кресленик для класів, визначаючи абстрактні методи, які мають бути реалізовані всіма нащадками

  • Забезпечують спільну поведінку групи класів
  • Декоратор @abstractmethod
  • Призначені для наслідування, не для створення екземплярів
  • Не всі методи в абстрактному базовому класі мають бути абстрактними (можуть бути конкретні)
class School:
    # Робити дії, як-от зарахування 
    # та додавання курсу
class MiddleSchool:
    # Грати на інструменті, вступати до клубу
    # але потрібно зараховувати й додавати курси
class HighSchool:
    # Грати у спортивній команді, подаватися
    # до коледжу, але потрібно зараховувати 
    # й додавати курси
Середній рівень об'єктно-орієнтованого програмування в Python

Створення абстрактного базового класу

from abc import ABC, abstractmethod

# Створіть абстрактний базовий клас, # що наслідує від ABC class School(ABC): @abstractmethod def enroll(self): # Цей метод потрібно реалізувати # у класах-нащадках pass
# Конкретні методи наслідуються def graduate(self): print("Congrats on graduating!")
  • Наслідуйтеся від класу ABC з модуля abc
  • pass
  • Будь-який клас, що наслідує School, має реалізувати метод enroll()
  • Також можна реалізовувати конкретні методи
Середній рівень об'єктно-орієнтованого програмування в Python

Реалізація абстрактних базових класів

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

# Створіть екземпляр HighSchool
high_school = HighSchool()
high_school.enroll()
Welcome to high school!
high_school.graduate()
Congrats on graduating!
  • HighSchool має визначити метод enroll()
  • TypeError, якщо enroll() не визначено
  • HighSchool наслідує метод graduate()
Середній рівень об'єктно-орієнтованого програмування в Python

Кілька абстрактних методів

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

    @abstractmethod
    def add_course(self, course_name):
        pass

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

  • Два абстрактні методи: enroll() і add_course()
class HighSchool(School):
    def __init__(self):
        self.courses = []

    # Реалізація абстрактного методу
    def enroll(self):
        print("Welcome to high school!")

    # Реалізація абстрактного методу
    def add_course(self, course_name):
        self.courses.append(course_name)
        print(f"You enrolled in {course_name}")

Середній рівень об'єктно-орієнтованого програмування в Python

Давайте потренуємось!

Середній рівень об'єктно-орієнтованого програмування в Python

Preparing Video For Download...