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

  1. Python 3.4+ - Создайте абстрактный класс в Python путем наследования от модуля ABC
  2. Python 3.0+ - Создайте абстрактный класс в Python путем наследования от модуля ABCMeta
  3. Метод проверки, является ли класс абстрактным или нет в Python

Абстрактный класс является ограниченным классом, потому что он не может быть создан - вы не можете использовать его для создания объектов. Его можно унаследовать только от другого класса.

Абстрактный класс нацелен на определение общей функции / поведения, которые могут унаследовать несколько подклассов без необходимости реализации всего абстрактного класса.

В Python мы можем создавать абстрактный класс на основе разных способов в зависимости от версии Python.

Python 3.4+ - Создайте абстрактный класс в Python путем наследования от модуля ABC

В Python 3.4 для создания абстрактного класса.

  1. Импортируйте модуль ABC (абстрактные базовые классы).
from abc import ABC, abstractmethod
  1. Объявите абстрактный метод с помощью декоратора @abstractmethod.
from abc import ABC, abstractmethod
class ExampleAbstractClass(ABC):
    @abstractmethod
    def abstractmethod(self):
        pass

Ниже приведен пример, в котором абстрактный класс Vehicle имеет два подкласса, а именно Car и Bike. У классов Car и Bike есть своя уникальная реализация.

from abc import ABC, abstractmethod
 
class Vehicle(ABC):
    @abstractmethod
    def numberofwheels(self):
        pass
 
class Car(Vehicle):
    def numberofwheels(self):
        print("A Car has 4 wheels")
 
class Bike(Vehicle):
    def numberofwheels(self):
        print("A Bike has 2 wheels")

C = Car()
C.numberofwheels()
 
B = Bike()
B.numberofwheels()

Выход:

A Car has 4 wheels
A Bike has 2 wheels

Python 3.0+ - Создайте абстрактный класс в Python путем наследования от модуля ABCMeta

В Python 3.0+ для создания абстрактного класса.

  1. Импортируйте модуль ABCMeta (абстрактные базовые классы).
from abc import ABCMeta, abstractmethod
  1. Объявите абстрактный метод с помощью декоратора @abstractmethod и укажите metaclass=ABCMeta.
from abc import ABCMeta, abstractmethod
class Example2AbstractClass(metaclass=ABCMeta):
    @abstractmethod
    def abstractmethod2(self):
        pass

Ниже приведен пример.

from abc import ABCMeta, abstractmethod

class Vehicle(metaclass=ABCMeta):

    @abstractmethod
    def numberofwheels(self):
        pass

class Car(Vehicle):
    def numberofwheels(self):
        print("A Car has 4 wheels")

class Bike(Vehicle):
    def numberofwheels(self):
        print("A Bike has 2 wheels")

C = Car()
C.numberofwheels()

B = Bike()
B.numberofwheels()

Выход:

A Car has 4 wheels
A Bike has 2 wheels

Метод проверки, является ли класс абстрактным или нет в Python

Чтобы проверить, действительно ли созданный класс является абстрактным классом, мы должны создать экземпляр класса. Абстрактный класс не разрешит создание экземпляров и выдаст ошибку.

Например, если мы создадим реферат, как показано ниже.

x = ExampleAbstractClass()

Затем отображается ошибка.

Can't instantiate abstract class ExampleAbstractClass with abstract methods abstractmethod

Сопутствующая статья - Python Class

  • Статические переменные класса в Python
  • Статический метод Python
  • Метаклассы в Python
  • Частные методы в Python