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

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

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

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от 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


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

от enid , год назад

@roma 

Для создания абстрактного класса в Python необходимо использовать модуль abc (аббревиатура от abstract base classes - абстрактные базовые классы).


Пример создания абстрактного класса:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from abc import ABC, abstractmethod

class Shape(ABC): # Shape - название класса
    @abstractmethod
    def area(self):
        pass

    @abstractmethod
    def perimeter(self):
        pass


В данном примере создается абстрактный класс Shape, который содержит два абстрактных метода: area (площадь) и perimeter (периметр). Абстрактный метод - это метод, который не имеет реализации в самом классе, а должен быть переопределен в классах-наследниках.


Для объявления абстрактного метода используется декоратор @abstractmethod из модуля abc. Если класс содержит хотя бы один абстрактный метод, он становится абстрактным, и его экземпляры не могут быть созданы.


Пример создания класса, который наследуется от абстрактного класса Shape:

1
2
3
4
5
6
7
8
9
class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14 * self.radius**2

    def perimeter(self):
        return 2 * 3.14 * self.radius


В данном примере создается класс Circle, который наследуется от абстрактного класса Shape. Для того чтобы класс можно было наследовать, необходимо в классе-наследнике реализовать все абстрактные методы базового класса.


Объекты класса Circle можно создавать и использовать его методы для расчета площади и периметра круга.