HOWTO · Python

Equivalente di tostring() in Python

Scopri quali strumenti Python sostituiscono tostring(): str() per convertire, join() per le stringhe, f-strings o str.format() per i modelli e __str__() per gli oggetti personalizzati.

In questa pagina

Python non ha un metodo chiamato tostring(); il metodo corrispondente in Java si scrive toString(). Usa la funzione integrata str(value) quando ti serve la rappresentazione testuale di un singolo valore. Usa join() per combinare più stringhe e f-strings o str.format() per costruire un messaggio. Queste operazioni producono testo da visualizzare, non un formato di serializzazione generico.

Convertire un valore con str()

str() restituisce una stringa per numeri, raccolte e la maggior parte degli altri oggetti Python. È la risposta diretta alla domanda «Qual è l’equivalente di tostring() in Python?». Per una raccolta, il risultato è la sua rappresentazione leggibile, compresi i delimitatori e le rappresentazioni dei suoi elementi.

number = 123
values = [1, 2, 3]

print(str(number))
print(str(values))

Output:

123
[1, 2, 3]

Il risultato di entrambe le chiamate è un str. Convertire in questo modo un dizionario o una lista non crea JSON, CSV o un altro formato di scambio. Usa una libreria specifica per il formato quando un altro programma deve leggere i dati in modo affidabile.

Unire stringhe e valori misti

Chiama join() sul separatore, non sulla lista. Ogni elemento passato a join() deve essere già una stringa. Questo è il limite utile che distingue l’unione dalla conversione generale.

words = ["Hello", "world", "from", "Python"]
sentence = " ".join(words)
mixed = "|".join(map(str, [1, "two", None]))

print(sentence)
print(mixed)

Output:

Hello world from Python
1|two|None

Per un iterabile contenente numeri o altri oggetti, map(str, values) converte ogni elemento prima dell’unione. Una chiamata diretta come ", ".join(["one", 2]) genera un TypeError, perché join() non converte implicitamente gli elementi che non sono stringhe.

Formattare valori con le f-strings

Usa una f-string quando un messaggio contiene valori e il modello è noto nel punto in cui scrivi il codice. Le espressioni tra parentesi graffe vengono valutate e convertite durante la formattazione. Le specifiche di formato possono controllare precisione, larghezza e altri dettagli di presentazione.

name = "Ada"
score = 3.14159
message = f"{name} scored {score:.2f}"

print(message)

Output:

Ada scored 3.14

Le f-strings sono state introdotte in Python 3.6 e sono disponibili nell’attuale serie Python 3.14. Di solito sono la scelta più chiara per un modello locale e leggibile, ma non devono essere usate per serializzare dati destinati a un altro sistema.

Usare str.format() per i modelli

str.format() è utile quando un modello viene memorizzato separatamente, riutilizzato o deve supportare codice precedente alle f-strings. Converte i valori forniti mentre sostituisce i campi numerati o denominati.

item = "apple"
quantity = 5
message = "I have {quantity} {item}s.".format(quantity=quantity, item=item)

print(message)

Output:

I have 5 apples.

Preferisci i campi denominati quando un modello contiene più valori: rendono più chiara la relazione tra ciascun segnaposto e il relativo valore. Per il nuovo codice con un modello in linea, una f-string è in genere più breve.

Definire __str__() per oggetti personalizzati

Implementa __str__() quando la tua classe necessita di una rappresentazione utile e leggibile dalle persone. Python lo chiama per str(instance) e quando print() visualizza l’istanza. Deve restituire una stringa, non un numero o un altro oggetto.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"{self.name} ({self.age})"

person = Person("Ada", 36)
print(str(person))

Output:

Ada (36)

Mantieni __str__() conciso e utile per le persone. __repr__() ha uno scopo diverso, rivolto al debug e agli sviluppatori; definire uno dei due non sostituisce l’altro.

Limiti e riepilogo dei metodi

Scegli l’operazione adatta al risultato che ti serve:

  • Usa str(value) per un singolo valore o per una rappresentazione leggibile di una raccolta.
  • Usa separator.join(strings) per combinare stringhe, convertendo prima gli elementi con map(str, values) quando necessario.
  • Usa le f-strings per modelli in linea leggibili e str.format() per modelli riutilizzabili o memorizzati separatamente.
  • Implementa __str__() quando una tua classe necessita di una rappresentazione leggibile dalle persone.

Questi metodi non garantiscono una rappresentazione reversibile o leggibile da una macchina. Per JSON, usa json.dumps() e gestisci i tipi che JSON non può rappresentare. Per un formato di scambio personalizzato, definisci esplicitamente lo schema invece di affidarti all’output di str().

In breve, sostituisci una chiamata tostring() in stile Java con str(value), quindi scegli join(), una f-string, str.format() o __str__() quando l’attività consiste precisamente nel combinare, formattare o personalizzare il testo.