Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Enlace tardío Python: Profundizando en las clases

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?

Late bindingque también podrías escuchar como vinculación tardía— es un mecanismo que nos permite escribir código en clases base (padre) que se comporta correctamente cuando lo usan clases derivadas (hijas), sin necesidad de cambiarlo.

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 self para acceder a los atributos del objeto.
  • El método get_attribute permite 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 self dentro de get_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 de B cuando se llama desde un objeto de tipo B. 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 self dentro 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.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY