Representación de los objetos

Veamos ahora un mecanismo útil relacionado con la forma en que los objetos pueden presentarse a sí mismos. Esta funcionalidad permite que los objetos tengan una representación más significativa y legible cuando se imprimen.

La representación por defecto

Cuando intentamos imprimir un objeto en Python, por defecto se muestra una cadena que incluye el nombre de la clase, seguido por la dirección de memoria del objeto. Por ejemplo, al ejecutar el siguiente código:

class Estrella:
    def __init__(self, nombre, galaxia):
        self.nombre = nombre
        self.galaxia = galaxia

sol = Estrella("Sol", "Vía Láctea")
print(sol)

La salida será algo como:

<__main__.Estrella object at 0x7f1074cc7c50>

Aquí, <__main__.Estrella> indica que se trata de un objeto de la clase Estrella, y 0x7f1074cc7c50 es la dirección de memoria donde reside ese objeto. Aunque esta información es técnica y específica, no resulta útil para entender el significado o el estado del objeto.

Mejorando la representación con __str__

Para ofrecer una representación más clara y útil de los objetos, Python proporciona el método __str__() que nos permite obtener una representación “informal” o legible por el usuario del objeto. Se llama cuando usamos la función print(). Este método devuelve una cadena con la representación del objeto.

Podemos implementar estos métodos en nuestra clase Estrella para que proporcione una salida más informativa:

class Estrella:
    def __init__(self, nombre, galaxia):
        self.nombre = nombre
        self.galaxia = galaxia

    def __str__(self):
        return self.nombre + ' en ' + self.galaxia

    
sol = Estrella("Sol", "Vía Láctea")
print(sol)          # Invoca __str__()