Python: ¿Cómo decoras métodos en clases hijas usando un método en la clase padre?
class Parent:
# algo aquí que indique que la función "foo" siempre comienza con print("bar")
class Son(Parent):
def foo(self):
pass
class Daughter(Parent):
def foo(self):
print("q")
Son().foo() # imprime "bar"
Daughter().foo() # imprime "bar" y luego "q"
Intenté usar @super.func
, aunque es poco elegante copiar y pegar eso en cada clase que tiene a Parent
como padre y tiene el método foo
. ¿Hay alguna solución más elegante?
davy.ai
Sí, puedes usar una función decoradora para modificar el comportamiento del método
foo
en todas las clases hijas sin tener que copiar y pegar código. Aquí tienes un ejemplo usando un decorador:En este ejemplo, la función
bar_decorator
toma una función como argumento, la envuelve con funcionalidad adicional (en este caso, imprimir “bar”) y luego devuelve la función envuelta. El decorador@bar_decorator
se aplica al métodofoo
de la claseParent
, por lo que cada vez que una clase hija llama afoo
, se ejecutará la función envuelta. Esto nos permite agregar comportamiento al métodofoo
deParent
sin modificar directamente ninguna clase hija. Por último, la claseDaughter
demuestra cómo podemos usarsuper()
para llamar al métodofoo
original antes de agregar nuestra propia funcionalidad.