Python OPP, e perché sono importanti repr() e str()

Python OPP perché sono importanti repr() e str()?

PROGRAMMAZIONE PYTHON

L’articolo scopre varie facce dietro all’utilizzo di repr() e str() per le classi Python

Le classi Python hanno bisogno di una rappresentazione in stringa per fornire all'utente e agli sviluppatori maggiori informazioni rispetto a una semplice confusione di lettere. Foto di Surendran MP su Unsplash

Le classi Python hanno molte facce. Ad esempio, puoi creare una classe vuota:

class MyClass:    pass

e può ancora essere utile, ad esempio, come un valore sentinella. Puoi aggiungere un metodo __init__():

class MyClass:    def __init__(self, value):        self.value = value

Sarà comunque una classe molto semplice, ma questa volta, conserverà un valore particolare.

Un potente vantaggio delle classi Python è che possono essere usate come tipi, come mostrato di seguito:

def foo(x: MyClass, n: int) -> list[MyClass]:    return [x] * n

Ricorda che non implementare il metodo __init__() non significa che non esista. Infatti, abbiamo sovraccaricato il metodo __init__() sopra, non solo implementato. Questo è un altro aspetto significativo delle classi Python che dovresti conoscere: puoi sovraccaricare molti altri metodi, come __new__(), __eq__() e __setattr__(). Se non sovraccarichi questi metodi, alcuni avranno la loro implementazione predefinita (come __init__(), __new__(), __setattr__() e __eq__()), mentre altri no (come __lt__() e tutti gli altri metodi di confronto diversi da __eq__(), __getitem__(), __setitem__() e __len__()).

Una classe può ereditare da un’altra classe, come qui:

class MyClass(dict):    @staticmethod    def say_hello(self):        print("Ciao!")

e, come sopra, può utilizzare anche metodi statici, ma anche metodi di classe. Puoi creare classi mixin, classi base astratte, singleton e fare tantissime altre cose, talvolta molto utili.

Le classi Python hanno così tante facce che ci vorrebbe anni per discutere ognuna di esse in dettaglio e lo faremo nei prossimi articoli. In questo, ci concentreremo su un aspetto particolare: la differenza e il potere dei metodi __repr__() e __str__().

A prima vista, potresti pensare che si tratti di un argomento secondario, ma in realtà è piuttosto importante. È facile implementare una classe Python, ma ci vuole più impegno per implementare una buona…