Crear una clase abstracta en Python
-
Python 3.4+: cree una clase abstracta en Python heredando del módulo
ABC
-
Python 3.0+: cree una clase abstracta en Python heredando del módulo
ABCMeta
- Método para verificar si una clase es abstracta o no en Python
Una clase abstracta es una clase restringida porque no se puede crear una instancia; no se puede usar para crear objetos. Solo se puede heredar de otra clase.
Una clase abstracta tiene como objetivo definir una función / comportamiento común que múltiples subclases pueden heredar sin tener que implementar toda la clase abstracta.
En Python, podemos crear una clase abstracta basada en diferentes formas basadas en la versión de Python.
Python 3.4+: cree una clase abstracta en Python heredando del módulo ABC
En Python 3.4, para crear una clase abstracta.
- Importe el módulo
ABC
(clases base abstractas).
from abc import ABC, abstractmethod
- Declare el método abstracto utilizando el decorador
@abstractmethod
.
from abc import ABC, abstractmethod
class ExampleAbstractClass(ABC):
@abstractmethod
def abstractmethod(self):
pass
A continuación se muestra un ejemplo en el que la clase abstracta Vehicle
tiene dos subclases, a saber, Car
y Bike
. Las clases Car
y Bike
tienen una implementación ú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()
Producción :
A Car has 4 wheels
A Bike has 2 wheels
Python 3.0+: cree una clase abstracta en Python heredando del módulo ABCMeta
En Python 3.0+, para crear una clase abstracta.
- Importe el módulo
ABCMeta
(clases base abstractas).
from abc import ABCMeta, abstractmethod
- Declare el método abstracto utilizando el decorador
@abstractmethod
y mencionemetaclass=ABCMeta
.
from abc import ABCMeta, abstractmethod
class Example2AbstractClass(metaclass=ABCMeta):
@abstractmethod
def abstractmethod2(self):
pass
A continuación se muestra un ejemplo.
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()
Producción :
A Car has 4 wheels
A Bike has 2 wheels
Método para verificar si una clase es abstracta o no en Python
Para verificar si la clase creada es realmente una clase abstracta o no, debemos crear una instancia de la clase. Una clase abstracta no permitirá la creación de instancias y arrojará un error.
Por ejemplo, si instanciamos un resumen como se muestra a continuación.
x = ExampleAbstractClass()
Luego, se muestra un error.
Can't instantiate abstract class ExampleAbstractClass with abstract methods abstractmethod