eistono dei metodi speciali li riconosci dalle due __
sono metodi non vengono chiamati direttamente dal programmatore ma vengono invocati da Python in situazioni particolari
metodi: verifica
si utilizzano e si codifica i metodi per verificare se vero/falso o la lunghezza/numero elementi
- __bool__ per definire quando l'oggetto é vero o falso
- __len__ definire la lunghezza o numero di elementi
esempio: utilizza anche la classe precedente Person
# definiamo una classe Team
class Team:
# definiamo un __init__ che assegna i membri all'istanza
def __init__(self, members):
self.members = members
# definiamo un __bool__ che restituisce False se il team ha 0 membri, altrimenti True
def __bool__(self):
return len(self.members) > 0
# definiamo un __len__ che restituisce il numero di membri
def __len__(self):
return len(self.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])
return '<Team object [{}]>'.format(names)
# creiamo un'istanza di Team con 3 membri
t1 = Team([Person('Guido', 'van Rossum'), Person('Alex', 'Martelli'), Person('Ezio', 'Melotti')])
# verifichiamo il repr dell'oggetto
t1
<Team object [Guido, Alex, Ezio]>
# verifichiamo che il team ha 3 membri
t1.members
[<Person object (Guido van Rossum)>,
<Person object (Alex Martelli)>,
<Person object (Ezio Melotti)>]
# verifichiamo che la lunghezza del team è 3
len(t1)
3
# verifichiamo che questo team è considerato "vero"
bool(t1)
True
# creiamo un'altra istanza di Team con 0 membri
t2 = Team([])
# verifichiamo il repr dell'oggetto
t2
<Team object []>
# verifichiamo che il team ha 0 membri
t2.members
[]
# verifichiamo che la lunghezza del team è 0
len(t2)
0
# verifichiamo che questo team è considerato "falso"
bool(t2)
False