Propiedad abstracta de Python

Ammar Ali 21 junio 2023
Propiedad abstracta de Python

Este tutorial discutirá el uso del módulo de clases base abstractas o abc para crear clases con propiedades abstractas en Python.

Propiedad abstracta de Python

La abstracción en la programación orientada a objetos se utiliza para ocultar información innecesaria a los usuarios. El funcionamiento interno de una función estará oculto para el usuario, pero el usuario puede usar la función para realizar una tarea.

Por ejemplo, usamos software de computadora para realizar diferentes tareas, pero no sabemos cómo el software realiza la tarea. Solo damos entradas al software y obtenemos salidas de él.

Podemos usar la abstracción en Python para reducir la complejidad de un programa ocultando información irrelevante.

Una clase se volverá abstracta si contiene uno o más métodos abstractos. Los métodos abstractos se definen en una subclase, y la clase abstracta se heredará de la subclase porque las clases abstractas son modelos de otras clases.

En Python, podemos usar el módulo abc o el módulo de clases base abstractas para implementar clases abstractas. La clase base abstracta proporciona una interfaz para las subclases, y es beneficiosa cuando el código es grande y recordar todas las clases es un desafío.

Necesitamos importar el módulo abc en la clase base y usarlo para decorar el método de la clase base como un resumen. Para definir un método abstracto, podemos usar el decorador @abstractmethod antes de definir el método en la clase base, y podemos usar el decorador @property para convertir un método en una propiedad abstracta.

Por ejemplo, importemos el módulo abc y creemos una clase Bicicleta que se heredará de la clase ABC. Dentro de la clase Bicicleta, crearemos un método abstracto, kilometraje().

Ahora podemos heredar la clase base para implementar diferentes subclases con métodos abstractos. Vea el código a continuación.

# Class Code
from abc import ABC, abstractmethod


class Bike(ABC):
    @property
    @abstractmethod
    def mileage(self):
        pass


class Honda(Bike):
    def mileage(self):
        print("The mileage is 20kmph")


class CD70(Bike):
    def mileage(self):
        print("The mileage is 15kmph ")


class CD150(Bike):
    def mileage(self):
        print("The mileage is 34kmph ")


# Main Code

h = Honda()
h.mileage()

r = CD70()
r.mileage()

s = CD150()
s.mileage()

Producción :

The mileage is 20kmph
The mileage is 15kmph
The mileage is 34kmph

En el código anterior, creamos objetos de las subclases y luego llamamos a su método kilometraje(), que imprimirá el kilometraje de la bicicleta. La clase Bicicleta también tiene el método kilometraje(), pero no podemos llamarlo porque el método es abstracto.

Por ejemplo, repitamos el ejemplo anterior y llamemos al método kilometraje de la clase Bicicleta. Vea el código a continuación.

# Class Code
from abc import ABC, abstractmethod


class Bike(ABC):
    @property
    @abstractmethod
    def mileage(self):
        pass


class Honda(Bike):
    def mileage(self):
        print("The mileage is 20kmph")


class CD70(Bike):
    def mileage(self):
        print("The mileage is 15kmph ")


class CD150(Bike):
    def mileage(self):
        print("The mileage is 34kmph ")


# Main Code
b = Bike()
b.mileage()

Producción :

TypeError: Can't instantiate abstract class Bike with abstract methods mileage

El código anterior dice claramente que la clase abstracta Bicicleta tiene métodos abstractos, por lo que no se puede crear su objeto y no se pueden llamar sus métodos.

También podemos hacer métodos de otras clases como métodos abstractos usando el decorador @abstractmethod antes de la definición del primer método. Cuando uno intenta hacer que un objeto de esa clase acceda a los métodos, Python dará un error.

Por ejemplo, hagamos abstractos los métodos de una subclase. Vea el código a continuación.

# Class Code
from abc import ABC, abstractmethod


class Bike(ABC):
    @property
    @abstractmethod
    def mileage(self):
        pass


class Honda(Bike):
    @abstractmethod
    def mileage(self):
        print("The mileage is 20kmph")

    def mileage2(self):
        print("The mileage is 200 kmph")


# Main Code
b = Honda()
b.mileage2()

Producción :

TypeError: Can't instantiate abstract class Honda with abstract methods mileage

Hemos definido dos métodos en la clase Honda, pero ninguno de ellos es accesible porque la clase es abstracta. Consulte este enlace para obtener más detalles sobre las clases base abstractas.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Artículo relacionado - Python Class