tengo el siguiente código:La herencia múltiple y usando un método de una de las clases base
class A(object):
def __init__(self):
self.name = "A"
super(A, self).__init__()
def Update(self):
print "Update A"
self.PickTarget()
def PickTarget(self):
print "PickTarget A"
class B(object):
def __init__(self):
self.name = "B"
super(B, self).__init__()
def Update(self):
print "Update B"
self.PickTarget()
def PickTarget(self):
print "PickTarget B"
class C(A, B):
def __init__(self):
super(C, self).__init__()
def Update(self, useA):
if useA:
A.Update(self)
else:
B.Update(self)
c = C()
c.Update(useA = True)
# prints:
# Update A
# PickTarget A
c.Update(useA = False)
# prints:
# Update B
# PickTarget A
¿Por qué llamar C.Update
con useA=False
todavía poner en A.PickTarget
? ¿Cómo puedo hacer que esto funcione como quiero que funcione (es decir, B.Update siempre llama a B.PickTarget)? Estoy seguro de que esto se ha preguntado antes, pero mi búsqueda no arrojó nada, probablemente porque no sé qué buscar.
Aunque todavía creo que esto puede requerir un rediseño, señalaré que la creación de nombres ofrece una solución bastante flexible para este problema. Ver [mi edición] (http://stackoverflow.com/questions/6849519/multiple-inheritance-and-using-a-method-of-one-of-the-base-classes/6849613#6849613). – senderle