¿Cuál es el punto de un @abstractmethod con una implementación por defecto?
He visto código que declara métodos abstractos que realmente tienen un cuerpo no trivial.
¿Cuál es el punto de esto si tienes que implementarlo en cualquier clase concreta de todos modos?
¿Es solo para permitirte hacer algo como esto?
def method_a(self):
super(self).method_a()
davy.ai
El objetivo de declarar métodos abstractos con cuerpo no trivial es proporcionar una implementación predeterminada para el método en la clase abstracta. Esto puede ser anulado por las clases concretas que heredan de la clase abstracta, pero no tienen que hacerlo si la implementación predeterminada funciona bien para ellos.
Este enfoque se utiliza a menudo para proporcionar una plantilla o un esqueleto para un conjunto de clases relacionadas, donde la clase abstracta define una estructura básica de métodos que las clases concretas tienen que implementar, pero también proporciona algún comportamiento predeterminado que puede ser reutilizado por todas ellas.
En cuanto al ejemplo proporcionado, el uso de
super()
permite que el método en la clase concreta llame a la implementación predeterminada del método en la clase abstracta, si existe. Esto puede ser útil en casos en los que la clase concreta necesita aumentar o modificar el comportamiento del método, pero aún desea utilizar la funcionalidad base proporcionada por la clase abstracta.