Insieme di tuple di oggetti - es 3 (hw3)

v
val9 (9770 points)
0 28 53
asked Dec 6, 2018 in Es3 by val9 (9,770 points)

Nella funzione in_coppia() si richiede un set di tuple, i cui primi due elementi sono oggetti. All'interno di un insieme non è possibile inserire oggetti in quanto per gli oggetti mutabili non è possibile applicare le funzioni di hash. 

Mi chiedo se il "set" che più volte si ripresenta nel testo è da intendersi come un insieme oppure come lista? 

un set di tuple: ogni tupla è del tipo (a_f, a_m, n_f),
            dove a_f e a_m sono due istanze di oggetto di tipo Attore
            (di cui una rappresenta l'attore self), di genere diverso (campo "GENDER" dei dati json)

1 Answer

Best answer
_andrea_ (45670 points)
2 40 297
answered Dec 6, 2018 by _andrea_ (45,670 points)
selected Dec 7, 2018 by val9
Hai provato a fare semplicemente quello che c'è scritto? Se ci provi ti assicuro che ti riesce. L'insieme è un insieme (c'è scritto pure set...) E le tuple sono tuple proprio come scritto lì (e se non ho capito male a_f e a_m vanno scambiati)
_andrea_ (45670 points)
2 40 297
commented Dec 6, 2018 by _andrea_ (45,670 points)
Ma poi scusa...come sarebbe a dire che negli insiemi non puoi metterci oggetti? L'esercizio si basa completamente sul ritornare set di oggetti, come nei metodi Film.attori(), Attore.film(), Regista.film() e il resto. Se sei riuscito a fare quelli continua come facevi prima
v
val9 (9770 points)
0 28 53
commented Dec 6, 2018 by val9 (9,770 points)

In realtà no, non sono riuscita come facevo prima. Continuava a darmi questo tipo di errore "Type error Unhashable type:set". Cercando in rete, ho letto che c'erano problemi con l'inserimento di oggetti mutabili all'interno di un insieme e quindi, anziché restituire le coppie di oggetti ho restituito i nomi e infatti non mi funziona. 

_andrea_ (45670 points)
2 40 297
commented Dec 6, 2018 by _andrea_ (45,670 points)
Ma quindi all'inizio riesci a mettere gli oggetti negli insieme giusto? Prova a fare solo una prova nella console: crea due oggetti a caso, mettili in una tupla e poi metti la tupla nell'insieme
s=set()
a,b=Oggetto(),Oggetto()
s.add((a,b))
v
val9 (9770 points)
0 28 53
commented Dec 7, 2018 by val9 (9,770 points)

Ho risolto il problema. Avevo definito in più il metodo __eq__ per confrontare gli oggetti e questo mi impediva di aggiungere oggetti ad un insieme. 

_andrea_ (45670 points)
2 40 297
commented Dec 7, 2018 by _andrea_ (45,670 points)
Ah ok, meglio così