Stampa un oggetto di una classe in Python

Muhammad Waiz Khan 18 luglio 2021
  1. Stampa un oggetto in Python usando il metodo __repr__()
  2. Stampa un oggetto in Python usando il metodo __str__()
  3. Stampa un oggetto in Python aggiungendo un nuovo metodo di classe
Stampa un oggetto di una classe in Python

In questo tutorial, esamineremo più metodi per stampare un oggetto di classe in Python. Supponiamo di voler stampare un’istanza di classe usando la funzione print(), come visualizzare i dati oi valori dell’oggetto. Possiamo farlo utilizzando i metodi spiegati di seguito.

Stampa un oggetto in Python usando il metodo __repr__()

Il metodo __repr__() restituisce la rappresentazione stampabile dell’oggetto sotto forma di stringa. Per impostazione predefinita, restituisce il nome della classe dell’oggetto e l’indirizzo dell’oggetto.

Quando stampiamo un oggetto in Python usando la funzione print(), viene chiamato il metodo __str__() dell’oggetto. Se non è definito, il __str__() restituisce il valore di ritorno del metodo __repr__(). Ecco perché quando proviamo a stampare un oggetto di una classe definita dall’utente usando la funzione print(), restituisce il valore di ritorno del metodo __repr__().

Pertanto, possiamo definire o sovrascrivere il metodo __repr__() per stampare il riepilogo di un oggetto o i valori desiderati.

Supponiamo di avere una classe definita dall’utente ClassA senza il metodo __repr__(), il codice di esempio sotto mostra l’output quando proviamo a stampare un oggetto della ClassA senza il metodo __repr__().

class classA:
    def __init__(self):
        self.var1 = 0
        self.var2 = "Hello"


A = classA()
print(A)

Produzione:

<__main__.classA object at 0x7fa29aa28c50>

Poiché non abbiamo definito il metodo __repr__(), di default ha restituito il nome della classe e l’indirizzo dell’oggetto.

Ora, definiamo il metodo __repr__() della classe classA, e quindi usiamo la funzione print(). print() e print(repr()) dovrebbero restituire lo stesso valore.

class classA:
    def __init__(self):
        self.var1 = 0
        self.var2 = "Hello"

    def __repr__(self):
        return "This is object of class A"


A = classA()
print(A)
print(repr(A))

Produzione:

This is object of class A
This is object of class A

Stampa un oggetto in Python usando il metodo __str__()

Il metodo __str__() restituisce la versione stringa dell’oggetto in Python. Se un oggetto non ha un metodo __str__(), restituisce lo stesso valore del metodo __repr__().

Abbiamo visto nei codici di esempio sopra, nel caso in cui il metodo __str__() non sia definito, il metodo print() stampa la rappresentazione stampabile dell’oggetto usando il metodo __repr__().

Ora, definiamo il metodo __str__() della nostra classe di esempio ClassA e poi proviamo a stampare l’oggetto della classA usando la funzione print(). La funzione print() dovrebbe restituire l’output del metodo __str__().

class classA:
    def __init__(self):
        self.var1 = 0
        self.var2 = "Hello"

    def __repr__(self):
        return "This is object of class A"

    def __str__(self):
        print("var1 =", self.var1)
        print("var2 =", end=" ")
        return self.var2


A = classA()
print(A)

Produzione:

var1 = 0
var2 = Hello

Stampa un oggetto in Python aggiungendo un nuovo metodo di classe

Un altro approccio può essere usato invece di sovrascrivere o definire i metodi __str__() e __repr__() della classe. Un nuovo metodo print() può essere descritto all’interno della classe, che stamperà gli attributi oi valori della classe di nostra scelta.

Il codice di esempio seguente mostra come definire e quindi utilizzare il metodo object.print() per stampare un oggetto in Python.

class classA:
    def __init__(self):
        self.var1 = 0
        self.var2 = True
        self.var3 = "Hello"

    def print(self):
        print("var1 =", self.var1)
        print("var2 =", self.var2)
        print("var3 =", self.var3)


A = classA()
A.var2 = False
A.print()

Produzione:

var1 = 0
var2 = False
var3 = Hello

Articolo correlato - Python Object