Magic methods
Ereditati da object
__getattribute__: invocato per gli accessi in lettura__getattr__: invocato quando__getattribute__ha una miss__setattr__: definisce o cambia il valore di un attributo in ricerca attributi
Rappresentazione di un oggetto
__str__: viene utilizzato quando si chiama un oggettoobject__repr__: viene utilizzato quando si utilizzaprint(object)
__call__: da la possibilità di essere ‘chiamabile’, e quindi di agire come una funzione [[Metaprogrammazione#call|call]]
__get__(self, obj, objtype=None)
__set__(self, obj, value)
__delete__(self, obj)
__doc__: rappresenta la stringa per la documentazione
Attenzione: non fare override utilizzando la stessa funzione (eg: __eq__ con all’interno ==)
__eq__: equal
__ne__: not equal
__lt__: less than
__le__: less than or equal
__add__: somma
__sub__
__mul__
__truediv__
__floordiv__
__mod__
Attenzione Dal momento che il simbolo di operazione è zucchero sintattico, il metodo che viene chiamato è quello del primo membro dell’operazione. Ad esempio, in
op1+op2equivale aop1.__add__(op2). #python_book8
class weakint(int):
'''Numeri interi che "supportano" l'addizione con cast implicito di argomenti
non conformi nel tipo
'''
def __add__(self,other):
try:
other = int(other)
except ValueError:
other = 0
return super().__add__(other)
weakint(2) + '7' = 2 # e fin qui nessun problema
'7' + weakint(2) # qui nasce il problema per la questione spiegata sopraPer far fronte alla apparente assenza della proprietà commutativa, il compilatore, prima di eseguire l’operazione, controlla se nell’oggetto di destra è presente una funzione __radd__, che implementa la addizione da destra. Se c’è viene utilizzata.
# si inserisce questo nella classe weaking, e tutto funziona
__radd__ = __add__
'7' + weakint(2) = 2 # no problemContenitori
__getitem__
__setitem__
__delitem__
__len__
__contains__
__iter__
Rappresentazione
__str__
__repr__
__format__
__hash__