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 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:
- Crea sistemi complessi utilizzando ChatGPT
- Il co-fondatore di Google Brain afferma che le aziende tecnologiche stanno esagerando con le paure riguardanti i rischi dell’intelligenza artificiale
- Una nuova ricerca di intelligenza artificiale dalla Cina presenta GLM-130B un modello di linguaggio pre-allenato bilingue (inglese e cinese) con 130 miliardi di parametri
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…