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
