PROGRAMMAZIONE 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 __init__()
metodo:
class MyClass:
def __init__(self, value):
self.value = value
Sarà comunque una lezione molto semplice, ma questa volta manterrà un valore particolare.
Uno straordinario potere delle classi Python è che possono essere utilizzate come tipi, come mostrato di seguito:
def foo(x: MyClass, n: int) -> list(MyClass):
return (x) * n
Ricorda che non implementare il file __init__()
metodo non significa che non esista. In effetti, abbiamo sovraccaricato il file __init__()
metodo 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("Hello!")
e, anche come sopra, può utilizzare metodi statici, ma anche metodi di classe. Puoi creare classi mixin e classi base astratte, singleton e creare tantissime altre cose, a volte molto utili.
Le classi Python hanno così tante facce che ci vorrebbero anni per discuterle in dettaglio, e lo faremo nei prossimi articoli. In questo ci concentreremo su un aspetto particolare: la differenza tra e la potenza del __repr__()
E __str__()
metodi.
A prima vista potresti pensare che questo sia un argomento minore, ma in realtà è piuttosto importante. È facile implementare una classe Python, ma è necessario uno sforzo maggiore per implementare una classe Python Bene…
Fonte: towardsdatascience.com