Crear una clase abstracta en Python

Najwa Riyaz 30 enero 2023
  1. Python 3.4+: cree una clase abstracta en Python heredando del módulo ABC
  2. Python 3.0+: cree una clase abstracta en Python heredando del módulo ABCMeta
  3. Método para verificar si una clase es abstracta o no en Python
Crear una clase abstracta 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.

  1. Importe el módulo ABC (clases base abstractas).
from abc import ABC, abstractmethod
  1. 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.

  1. Importe el módulo ABCMeta (clases base abstractas).
from abc import ABCMeta, abstractmethod
  1. Declare el método abstracto utilizando el decorador @abstractmethod y mencione metaclass=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

Artículo relacionado - Python Class