Un problema de herencia múltiple.
José Miguel Sánchez Alés
aussiliar en online.fr
Lun Ene 14 22:05:52 CET 2008
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
Más información sobre la lista de distribución Python-es