Module (46%)
Section (49%)

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())
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×