Post Top Ad

Your Ad Spot

miércoles, 14 de octubre de 2020

Clases base abstractas de Python

 

Las clases base abstractas son tipos especiales de clases en Python. Permiten al programador definir una clase base como plantilla para que otras clases hereden. La diferencia entre las clases base abstractas y las clases normales en Python es que con las clases base abstractas no desea que los consumidores de su clase base puedan crear instancias de la clase base en sí. Los servidores de clase base abstracta solo como modelo. Las subclases son los medios para proporcionar una implementación concreta de ese plan. Además de esto, puede hacer cumplir la restricción de que hay ciertos métodos en la clase base que las subclases deben implementar.


Clase simple con herencia

Conduciendo hacia adelante.
Conduciendo hacia adelante.

Este código anterior es una clase de vehículo simple y dos clases adicionales, automóvil y camión. Queremos que este programa sea extensible para que se puedan agregar nuevos tipos de automóviles o camiones. Ciertamente podemos crear un programa como este sin usar una clase base abstracta. De hecho, el código anterior parece funcionar. Cuando llamamos al método que se heredó en los objetos de automóvil y camión, ambos avanzan. Observe que también instanciamos un objeto Vehicle. Realmente no necesitamos eso, ya que el automóvil y el camión pueden hacer todo lo que necesitan sin tener una instancia de vehículo creada. Podemos cambiar este código para hacer uso de una clase base abstracta para lograr algunas cosas.


Agregar clase base abstracta

Para hacer uso de una clase base abstracta en Python, necesita importar ABC y método abstracto como vemos aquí.


Heredar de Abc indica que esta es una clase base abstracta

La clase de vehículo aquí tiene un tipo de <class 'abc.ABCMeta'>.


Declarar un método como abstracto requiere una subclase para implementarlo

La sintaxis anterior es un poco especial. Podemos ver el decorador @abstractmethod que le dice a Python, este método debe ser implementado por cualquier subclase que herede de la clase base abstracta.


No se puede crear una instancia de la clase base abstracta

Dado que Vehicle ahora ha heredado de ABC, ya no se puede crear una instancia. Si lo intentamos, Python arrojará un error.

Rastreo (llamadas recientes más última):
  Archivo "C: /python/justhacking/abc.py", línea 38, en <módulo>
    vehículo1 = Vehículo () 
TypeError: No se puede crear una instancia de vehículo de clase abstracta con métodos abstractos go_forward

Agregar una subclase

Creemos un ejemplo de clase Car que ahora hereda de Vehicle. Dado que hemos implementado algunas reglas en la clase Vehicle usando el módulo ABC, verá que Python genera un error si no creamos la Subclase con los atributos o métodos necesarios.

Rastreo (llamadas recientes más última):
  Archivo "C: /python/justhacking/abc.py", línea 38, en <módulo>
    car1 = Coche (Verdadero)
TypeError: no se puede crear una instancia de la clase abstracta Car con métodos abstractos go_forward

Python ahora está imponiendo el hecho de que si queremos tener una subclase de vehículo, debe implementar el método go_forward (). Démosle otra oportunidad.

Conduciendo hacia adelante

Una segunda subclase

Podemos crear una subclase diferente de Camión que también herede de la clase base abstracta Vehículo.

Presione el acelerador para avanzar
Conduciendo hacia adelante

Las clases base abstractas pueden ser una herramienta muy útil para hacer cumplir un conjunto de restricciones entre los consumidores de cualquier clase dada. Vale la pena tomarse el tiempo de experimentar con las clases base abstractas para comprender sus beneficios potenciales.

  • Las clases abstractas son clases que están destinadas a ser heredadas, pero evitan implementar métodos específicos, dejando solo las firmas de métodos que las subclases deben implementar.
  • Las clases abstractas son útiles para definir y aplicar abstracciones de clases a un alto nivel, similar al concepto de interfaces en lenguajes tipados, sin la necesidad de implementar métodos.
  • Con el módulo abc podemos evitar que se creen instancias de clases secundarias cuando no anulan los métodos de clase abstracta de sus padres y antepasados.


No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas