
Il metodo __str__ delle classi in Python
Oggi parliamo del metodo `__str__` delle classi Python. Questo metodo ti permette di definire come un oggetto deve essere rappresentato come stringa.
__str__
Il metodo `__str__` viene chiamato quando utilizzi la funzione str() o print() su un oggetto.
E' uno dei metodi speciali in Python, noti anche come "dunder" methods (da "double underscore"), utilizzati per dare una funzionalità particolare agli oggetti.
A cosa serve? Immagina di avere una classe complessa e vuoi essere in grado di stampare una rappresentazione leggibile del suo stato. Di default Python usa una rappresentazione predefinita che di solito non è molto informativa. Definendo il metodo `__str__`, invece, puoi personalizzare questa rappresentazione per renderla più chiara.
Vediamo un esempio pratico per capire meglio come funziona.
Supponi di avere una classe `Persona`:
class Persona:
def __init__(self, nome, eta):
self.nome = nome
self.eta = eta
Crea un'istanza di Persona
persona = Persona("Alice", 30)
Se stampi l'oggetto Python ti restituisce il riferimento dell'oggetto che non è molto utile.
print(persona)
<__main__.Persona object at 0x7f4748338310>
Ora, aggiungi il metodo `__str__` alla classe:
class Persona:
def __init__(self, nome, eta):
self.nome = nome
self.eta = eta
def __str__(self):
return f"Persona(nome={self.nome}, eta={self.eta})"
Crea una nuova istanza di Persona
persona = Persona("Alice", 30)
Quando stampi l'oggetto Python richiama il metodo __str__ che visualizza il nome e l'età della persona. Molto meglio, vero?
print(persona)
Persona(nome=Alice, eta=30)
Ovviamente puoi personalizzare il messaggio di ritorno e le informazioni a seconda delle tue esigenze.
In ogni caso ricorda che il metodo `__str__` deve restituire sempre una stringa (`str`).
Un altro metodo simile è `__repr__`. La differenza principale è che `__repr__` è pensato per fornire una rappresentazione più dettagliata e precisa dell'oggetto, mentre `__str__` è più per una rappresentazione user-friendly.