El lun., 13 ago. 2018 a las 16:58, AGTUGO (<agt...@gmail.com>) escribió:

> Después de estudiar tu respuesta Chema, cómo dices kwargs es necesario. Y
> después de revisar la documentación de Python hace referencia a esta
> excelente guía
> https://rhettinger.wordpress.com/2011/05/26/super-considered-super/
>
> Pone ejemplos de cómo usar adaptadores para clases que no están diseñadas
> para ser cooperativas, y el adaptador puede ser la clase base que sea
> necesaria. Como dices **kwargs es la única manera.
>
> Si no puedes modificar la clase de la cual quieres heredar de manera
> multiple y no esta diseñada para ser cooperativa; pues un adaptador y ya
> está.
>
>
Si el fin de usar herencia múltiple era tener código más fácil de
reutilizar y mantener, precisamente los adaptadores consiguen el efecto
contrario. En el ejemplo que has puesto, no sólo habría que adaptar el
método __init__, sino también, por si acaso, los demás métodos heredados
como sería el método 'draw'. Además está el problema de las clases
colaborativas a medias, aquellas que usan 'super' para propagar la cadena
de llamadas, pero que en sus métodos no han considerado usar kwargs. Los
adaptadores no sirven para estos casos.

No sabría darte una solución general que valga en todos los casos. Por
comparar, pongo un gist con la reescritura en scala del mismo ejemplo.
Scala no tiene herencia múltiple, por lo que hay que ser explícito en el
orden de llamadas de los métodos heredados. Al menos los errores se
corrigen antes de ejecutar el código:

    https://gist.github.com/chemacortes/f1796931088e406060543894c9f45d52


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org
<https://blog.ch3m4.org/pages/busqueda-python-es/>
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a