Crie uma classe abstrata em Python
-
Python 3.4+ - Crie uma classe abstrata em Python herdando do módulo
ABC
-
Python 3.0+ - Crie uma classe abstrata em Python herdando do módulo
ABCMeta
- Método para verificar se uma classe é abstrata ou não 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.
- Importe o módulo
ABC
(classes base abstratas).
from abc import ABC, abstractmethod
- 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.
- Importe o módulo
ABCMeta
(classes base abstratas).
from abc import ABCMeta, abstractmethod
- Declare o método abstrato usando o decorador
@abstractmethod
e mencionemetaclass=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