I metodi speciali di Python
Nelle classi del linguaggio python si possono usare anche dei metodi speciali. Sono detti "speciali" perché hanno una sintassi specifica e svolgono funzioni predefinite dell'interprete.
La sintassi
I nomi dei metodi speciali iniziano e terminano con il doppio carattere underscore ( _ )
__metodospeciale__
I metodi speciali sono gli stessi usati dall'interprete per elaborare un'istruzione.
Alcuni metodi speciali nativi svolgono funzioni predefinite molto utili nella programmazione a oggetti di python.
Nota. I metodi speciali di python sono anche detti dunder per la presenza del doppio trattino in basso ( double underscore ).
A cosa servono i metodi speciali
Quando in una classe si implementa un metodo speciale, la classe emula un operatore del linguaggio.
Questo approccio è detto overloading dell'operatore.
Esempio
Creo una semplice lista composta da tre elementi.
>>> oggetto=['a','b','c']
Per leggere il terzo elemento della lista mi basta digitare
>>> oggetto[2]
'c'
Posso ottenere lo stesso risultato tramite il metodo speciale __getitem__
>>> oggetto.__getitem__(2)
'c'
E' ovviamente soltanto un semplice esempio, quasi banale. Non bisogna però sottovalutare l'overloading.
Nella programmazione a oggetti di python le potenzialità dell'overloading sono enormi ...per chi le conosce e le sa usare.
Lista dei metodi speciali
Ecco una lista di metodi speciali
- __init__ inizializza un oggetto della classe ( metodo costruttore )
- __str__ converte un oggetto in una stringa
- __del__ distrugge la classe ( metodo distruttore )
- __eq__ verifica se un valore è uguale a un altro
- __gt__ verifica se un valore è maggiore di un altro
- __ge__ verifica se un valore è maggiore o uguale a un altro
- __lt__ verifica se un valore è minore di un altro
- __le__ verifica se un valore è minore o uguale a un altro
- __call__ utilizza un oggetto come una funzione
- __getitem__ implementa l'operatore parentesi in entrata
- __setitem__ implementa l'operatore parentesi quadre in uscita
- __delitem__ elimina un valore self
- __contains__ verifica l'appartenenza al contenitore
- __add__ addiziona
- __sub__ sottrae
- __mul__ moltiplica
- __div__ divide
- __mod__ calcola il resto della divisione
- __repr__ converte un oggetto in una stringa ( se __str__ non è disponibile )
- __new__
- __bytes__
- __format__
- __hash__
- __bool__
- __getattr__
- __getattribute__
- __setattr__
- __delattr__
- __dir__
- __get__
- __set__
- __delete__
- __set_name__
- __slots__
- __init_subclass__
- __instancecheck__
- __subclasscheck__
- __call__
- __length_hint__
- __missing__
- __iter__
- __reversed__
- __matmul__
- __truediv__
- __floordiv__
- __divmod__
- __pow__
- __lshift__
- __rshift__
- __and__
- __xor__
- __or__
- __radd__
- __rsub__
- __rmul__
- __rmatmul__
- __rtruediv__
- __rfloordiv__
- __rmod__
- __rdivmod__
- __rpow__
- __rlshift__
- __rrshift__
- __rand__
- __rxor__
- __ror__
- __iadd__
- __isub__
- __imul__
- __imatmul__
- __itruediv__
- __ifloordiv__
- __imod__
- __ipow__
- __ilshift__
- __irshift__
- __iand__
- __ixor__
- __ior__
- __neg__
- __pos__
- __abs__
- __invert__
- __complex__
- __int__
- __float__
- __round__
- __index__
- __enter__
- __exit__
- __await__
- __aiter__
- __anext__
- __aenter__
- __aexit__
Come visualizzare i metodi speciali di una classe
Per vedere quali metodi speciali sono associati a una classe o oggetto, basta digitare il comando help con il nome della classe tra parentesi.
>>> help(nomeclasse)
L'istruzione visualizza l'elenco dei metodi della classe.
Nella lista sono indicati anche i metodi speciali usati.