Re: Un problema de herencia múltiple.
Pavel Muñoz
minibota en gmail.com
Lun Ene 14 22:46:45 CET 2008
Podiras decirnos un poco mas directamente, cual es el objetivo de todo
esto?... pregunto esto porque me parece que deberiamos hacer un pequeno
rediseno de tus clases y quiero saber que es exactamente lo que esperas que
hagan.
2008/1/14 José Miguel Sánchez Alés <aussiliar en online.fr>:
> Antes de nada, un saludo a la lista.
>
> A ver si podéis echarme una mano para mejorar el código. Resulta que
> tengo el siguiente esquema de clases:
>
> class A(object) <----- Nivel 1
> def __init__
> def cuota
> def deuda
>
> class B1(A) y class B2(A) <----- Nivel 2
> def __init__
> def Z__
> def K__
>
> class C(A) <----- Nivel 3
> def __init__
> Debe invocar el __init__ de B1 ó de B2
> def cuota
> def deuda
> def Z__
> Debe invocar la Z__ de B1 ó B2
>
> class D1(B1,C) y D2(B2,C) <----- Nivel 4
> def __init__
> Invoca el __init__ de C
>
> La clase C es simplemente un clase auxiliar que usan D1 y D2. El
> problema está en lo siguiente:
>
> Si defino los antecesores de D1 (el mismo razonamiento para D2) como
> B1,C resulta que al invocar los métodos deuda y plazo se ejecutan los
> métodos de A y yo quiero que se ejecuten los métodos de C (que serán los
> que invoquen a los de A)
>
> En cambio si defino C,B1, D1 invoca el método __init__ de C (bien), pero
> en dicho método no es posible invocar el método __init__ de B1 (o de B2
> en el caso de D2), porque super(C,self) es A y super(self.__class__,self)
> es el propio C. Lo mismo pasa con Z__.
>
> Sólo se me han ocurrido dos soluciones que me parecen un poco
> chapuceras:
>
> 1) Definir los antecesores de D1 como B1,C y en el propio D1 definir
> cuota y deuda para que invoquen los métodos cuota y deuda de C. Es
> chapucera esta solución porque tengo que definir esos dos métodos
> únicamente para que invoquen los correspondientes de C.
>
> 2) Definir los antecesores de D1 como C,B1 y añadirle al __init__ de C
> un argumento que sea "clasePadre". Cuando lo invoca D1 clasePadre=B1
> y cuando lo invoca D2 clasePadre=B2. Así C sabe si tiene que invocar
> a B1 o a B2. No me convence tampoco.
>
> ¿Se os ocurre algo mejor?
>
> --
> -- Hoy he reñido a un hostelero.
> -- ¿Por qué? ¿Cuándo? ¿Dónde? ¿Cómo?
> -- Porque cuando donde como
> sirven mal, me desespero
> --- Tomás de Iriarte ---
> Si Dióxido de Silicio | Debian GNU/Linux
> / \ (SiO2) | José Miguel Sánchez Alés
> O O Mineral de Cuarzo | aussiliar en online.fr | URL #257033
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es