metori: operatori
vengono utilizzati quando si usa un operatore con un oggetto creato in cui vengono definiti questi metodi
esempio: operatore aritmetici addizione
creiamo una classe e svuluppiamo i metodi __add__ __radd__ __iadd__
# definiamo un __init__ che assegna i membri all'istanza
def __init__(self, members):self.members = members# definiamo un __repr__ che restituisce il tipo dell'oggetto
# e i nomi dei membri del team
def __repr__(self):names = ', '.join([p.name for p in self.members])# definiamo un __contains__ che restituisce True se un membro
return '<Team object [{}]>'.format(names)
# fa parte del team, altrimenti False
def __contains__(self, other):return other in self.members# definiamo un __add__ che restituisce un nuovo team creato
# dall'aggiunta di una nuova persona o dall'unione di 2 team
def __add__(self, other):if isinstance(other, Person):# definiamo un __radd__ che è uguale ad __add__, visto chereturn Team(self.members + [other])elif isinstance(other, Team):return Team(self.members + other.members)else:raise TypeError("Can't add Team with {!r}.".format(other))
# l'addizione è un'operazione commutativa
__radd__ = __add__
# definiamo un __iadd__ che modifica il team aggiungendo una
# nuova persona o i membri di un altro team al team corrente
def __iadd__(self, other):if isinstance(other, Person):self.members.append(other)elif isinstance(other, Team):
return selfself.members.extend(other.members)else:
return selfraise TypeError("Can't add {!r} to the team.".format(other))
File "<stdin>", line 1, in <module>TypeError: Can't add Team with 5.
File "<stdin>", line 15, in __add__
tabelle con operatori e meotodi relativi
Operatore | Descrizione | Metodi speciali |
+ | addizione | __add__, __radd__, __iadd__ |
– | sottrazione | __sub__, __rsub__, __isub__ |
* | moltiplicazione | __mul__, __rmul__, __imul__ |
/ | divisione | __truediv__, __rtruediv__, __itruediv__ |
// | divisione intera | __floordiv__, __rfloordiv__, __ifloordiv__ |
% | modulo (resto della divisione) | __mod__, __rmod__, __imod__ |
Operatore | Descrizione | Metodo speciali |
== | uguale a | __eq__ |
!= | diverso da | __ne__ |
< | minore di | __lt__ |
<= | minore o uguale a | __le__ |
> | maggiore di | __gt__ |
>= | maggiore o uguale a | __ge__ |
Operatore | Descrizione | Metodi speciali |
x << n | esegue uno shift a sinistra di n posizioni dei bit di x | __lshift__, __rlshift__, __ilshift__ |
x >> n | esegue uno shift a destra di n posizioni dei bit di x | __rshift__, __rrshift__, __irshift__ |
x & y | esegue un and tra i bit di x e di y | __and__, __rand__, __iand__ |
x | y | esegue un or tra i bit di x e di y | __or__, __ror__, __ior__ |
x ^ y | esegue un or esclusivo tra i bit di x e di y | __xor__, __rxor__, __ixor__ |
Operatore | Descrizione | Metodo speciali |
object[item] | accesso a un elemento | __getitem__ |
object[item] = value | assegnamento a un elemento | __setitem__ |
del object[item] | rimozione di un elemento | __delitem__ |
object.attr | accesso a un attributo | __getattr__ |
object.attr = value | assegnamento a un attributo | __setattr__ |
del object.attr | rimozione di un attributo | __delattr__ |