Как создать абстрактный класс в Python?

Пользователь

от roma , в категории: Python , 3 месяца назад

Как создать абстрактный класс в Python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от NicolasSsh , 3 месяца назад

@roma  Для создания абстрактного класса, Вы можете воспользоваться стандартной библиотекой abc (Abstract Base Class)


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from abc import ABC, abstractmethod # Импортируем из модуля abc(Abstract Base Class) ABC и abstractmethod

class Person(ABC): # Создаем абстрактный класс Person
    # В абстрактном классе мы можем использовать абстрактные методы и обычные
    def create(self): # Обычный метод, который смогут использовать все наследники данного класса
        print("PERSON ARE CREATED")
    
    @abstractmethod # Ставим декоратор abstractmethod
    def info(self): # Данный метод является абстрактным, для каждого наследника он будет разным
        ...

class Worker_Person(Person): # Создаем наследующий класс класса Person
    def info(self): # Назначаем для абстрактного метода свою информацию в наследующем классе
        print("THIS PERSON ARE WORKING")

class Relaxing_Person(Person): # Для примера создаем еще один наследующий класс
    def info(self):
        print("THIS PERSON ARE RELAXING")

if __name__ == "__main__":
    # person = Person()
    # person.create()
    # person.info()

    # Если мы попробуем сделать то, что выше - получим ошибку 
    # TypeError: Can't instantiate abstract class Person with abstract method info
    # Абстрактный класс не может инитиализоровать абстрактный метод - нужен наследующий класс

    worker_person = Worker_Person()
    worker_person.create()
    worker_person.info()

    # Вывод : 
    # PERSON ARE CREATED
    # THIS PERSON ARE WORKING

    relaxing_person = Relaxing_Person()
    relaxing_person.create()
    relaxing_person.info()

    # Вывод :
    # PERSON ARE CREATED
    # THIS PERSON ARE RELAXING