@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 |
@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 можно создавать и использовать его методы для расчета площади и периметра круга.