Crie uma classe abstrata em Python

Najwa Riyaz 30 janeiro 2023
  1. Python 3.4+ - Crie uma classe abstrata em Python herdando do módulo ABC
  2. Python 3.0+ - Crie uma classe abstrata em Python herdando do módulo ABCMeta
  3. Método para verificar se uma classe é abstrata ou não em Python
Crie uma classe abstrata em Python

Uma classe abstrata é uma classe restrita porque não pode ser instanciada - você não pode usá-la para criar objetos. Só pode ser herdado de outra classe.

Uma classe abstrata visa definir uma função / comportamento comum que várias subclasses podem herdar sem ter que implementar a classe abstrata inteira.

Em Python, podemos criar uma classe abstrata baseada em diferentes maneiras com base na versão Python.

Python 3.4+ - Crie uma classe abstrata em Python herdando do módulo ABC

No Python 3.4, para criar uma classe abstrata.

  1. Importe o módulo ABC (classes base abstratas).
from abc import ABC, abstractmethod
  1. Declare o método abstrato usando o decorador @abstractmethod.
from abc import ABC, abstractmethod


class ExampleAbstractClass(ABC):
    @abstractmethod
    def abstractmethod(self):
        pass

Abaixo está um exemplo onde a classe abstrata Vehicle tem duas subclasses, a saber, Car e Bike. As classes Car e Bike têm uma implementação única.

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()

Resultado:

A Car has 4 wheels
A Bike has 2 wheels

Python 3.0+ - Crie uma classe abstrata em Python herdando do módulo ABCMeta

Em Python 3.0+, para criar uma classe abstrata.

  1. Importe o módulo ABCMeta (classes base abstratas).
from abc import ABCMeta, abstractmethod
  1. Declare o método abstrato usando o decorador @abstractmethod e mencione metaclass=ABCMeta.
from abc import ABCMeta, abstractmethod


class Example2AbstractClass(metaclass=ABCMeta):
    @abstractmethod
    def abstractmethod2(self):
        pass

Abaixo está um exemplo.

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()

Resultado:

A Car has 4 wheels
A Bike has 2 wheels

Método para verificar se uma classe é abstrata ou não em Python

Para verificar se a classe criada é de fato uma classe abstrata ou não, devemos instanciar a classe. Uma classe abstrata não permitirá a instanciação e gerará um erro.

Por exemplo, se instanciarmos um resumo como abaixo.

x = ExampleAbstractClass()

Em seguida, um erro é exibido.

Can't instantiate abstract class ExampleAbstractClass with abstract methods abstractmethod

Artigo relacionado - Python Class