- ¿Qué es Late Binding?
- Empezamos con una clase base
- Creamos una subclase
- Otro ejemplo
- Diferencias entre late binding y early binding
- ¿Por qué es importante?
Cuando trabajamos con programación orientada a objetos (OOP), uno de los conceptos clave es la herencia. Sin embargo, a medida que nuestras aplicaciones crecen, la herencia puede volverse más compleja. Para gestionar esta complejidad de manera más flexible, existe una herramienta llamada vinculación tardía (late binding ).
En esta lección, exploraremos qué es el late binding, cómo funciona en Python y por qué es tan útil al trabajar con clases e herencia.
¿Qué es Late Binding?
En palabras simples, es lo que permite que self en un método de la clase base se refiera siempre a la instancia actual, sin importar si pertenece a una subclase.
Veámoslo en acción con un ejemplo.
Empezamos con una clase base
Vamos a partir de una clase sencilla llamada HTMLElement. Esta clase representa un elemento HTML genérico, donde podemos guardar atributos como id o class:
class HTMLElement:
def __init__(self, attributes=None):
if attributes is None:
attributes = {}
self.attributes = attributes
def get_attribute(self, key):
return self.attributes.get(key)
En este código:
- Usamos
selfpara acceder a los atributos del objeto. - El método
get_attributepermite recuperar el valor de un atributo a partir de su nombre.
Creamos una subclase
Ahora creemos una clase que herede de HTMLElement, por ejemplo, HTMLAnchorElement (un enlace):
class HTMLAnchorElement(HTMLElement):
pass
Esta subclase no agrega nada nuevo todavía, pero ya está heredando todo el comportamiento de HTMLElement.
¿Qué pasa si creamos una instancia de esta clase y usamos el método get_attribute?
a = HTMLAnchorElement({'href': 'https://platzi.com'})
print(a.get_attribute('href')) # Muestra 'https://platzi.com'
Aquí viene lo interesante. Aunque get_attribute está definido en HTMLElement, el self se refiere al objeto creado de HTMLAnchorElement. Es decir, self “sabe” que pertenece a la subclase.
Otro ejemplo
Miremos este ejemplo un poco más abstracto, para entender mejor cómo funciona por dentro:
class A:
__name = 'Desde A'
def get_name(self):
print('Clase actual:', type(self).__name__)
return self.__name
class B(A):
pass
a = A()
print(a.get_name())
# Salida:
# Clase actual: A
# Desde A
b = B()
print(b.get_name())
# Salida:
# Clase actual: B
# Desde A
Aquí podemos ver lo siguiente:
- Cuando usamos
selfdentro deget_name, estamos accediendo al tipo real del objeto, aunque esté definido en una clase superior. - Aunque el método está en la clase
A, se comporta como si fuera parte deBcuando se llama desde un objeto de tipoB. Esa es la magia del late binding.
Diferencias entre late binding y early binding
| Concepto | Early Binding (vinculación temprana) | Late Binding (vinculación tardía) |
|---|---|---|
| Momento | En tiempo de compilación | En tiempo de ejecución |
| Flexibilidad | Menos flexible | Muy flexible |
| Uso en Python | No se usa | Se usa por defecto en métodos con self |
| ¿Puede trabajar con herencia? | Limitado | Ideal para jerarquías de herencia |
¿Por qué es importante?
- Nos evita tener que reescribir métodos en cada subclase.
- Permite que las clases hijas usen métodos de las clases base sin modificar su lógica.
- Hace que la estructura del código sea más mantenible y extensible.
En sistemas grandes con múltiples niveles de herencia, late binding permite que todo siga funcionando bien sin importar cuántas capas haya en la jerarquía de clases.
Resumen
- Late binding es una característica que permite que
selfdentro de un método se refiera al objeto real desde el que se llama el método, incluso si es de una subclase. - Esto permite escribir código más reutilizable y flexible en clases base.
- En Python, late binding es el comportamiento por defecto cuando usamos
self. - Es fundamental para el buen uso de la herencia en programación orientada a objetos.
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.