Cómo Python encuentra propiedades y métodos: continuación
Echemos un vistazo al ejemplo en el editor.
La clase Sub
hereda todos los bienes de dos superclases, Izquierda
y Derecha
(estos nombres están destinados a ser significativos).
No hay duda de que la variable de clase varDerecha
proviene de la clase Derecha
, y la variable varIzquierda
proviene de la clase Izquierda
respectivamente.
Esto es claro. Pero, ¿De donde proviene la variable var
? ¿Es posible adivinarlo? El mismo problema se encuentra con el método fun()
- ¿Será invocado desde Izquierda
o desde Derecha
? Ejecutemos el programa: la salida será:
I II DD Izquierda
Esto prueba que ambos casos poco claros tienen una solución dentro de la clase Izquierda
. ¿Es esta una premisa suficiente para formular una regla general? Sí lo es.
Podemos decir que Python busca componentes de objetos en el siguiente orden:
- Dentro del objeto mismo.
- En sus superclases, de abajo hacia arriba.
- Si hay más de una clase en una ruta de herencia, Python las escanea de izquierda a derecha.
¿Necesitas algo más? Simplemente haz una pequeña enmienda en el código - reemplaza:class Sub(Izquierda, Derecha):
con: class Sub(Derecha, Izquierda):
, luego ejecuta el programa nuevamente y observa qué sucede.
¿Qué ves ahora? Vemos:
D II DD Derecha
¿Ves lo mismo o algo diferente?
Code
class Izquierda:var = "I"
varIzquierda = "II"
def fun(self):
return "Izquierda"
class Derecha:
var = "D"
varDerecha = "DD"
def fun(self):
return "Derecha"
class Sub(Izquierda, Derecha):
pass
obj = Sub()
print(obj.var, obj.varIzquierda, obj.varDerecha, obj.fun())