set(list_of_objects)
kommer bara att ta bort dubbletterna om du vet vad en dubblett är, det vill säga du måste definiera en unikhet för ett objekt.
För att göra det måste du göra objektet hashbart. Du måste definiera både __hash__
och __eq__
metod, så här:
http://docs.python.org/glossary.html#term-hashable
Men du behöver förmodligen bara definiera __eq__
metod.
REDIGERA :Hur man implementerar __eq__
metod:
Du måste känna till, som jag nämnde, unikhetsdefinitionen för ditt objekt. Förutsatt att vi har en bok med attributen author_name och title som deras kombination är unik, (så att vi kan ha många böcker som Stephen King har skrivit, och många böcker som heter The Shining, men bara en bok som heter The Shining av Stephen King), då implementeringen är som följer:
def __eq__(self, other):
return self.author_name==other.author_name\
and self.title==other.title
På samma sätt är det så här jag ibland implementerar __hash__
metod:
def __hash__(self):
return hash(('title', self.title,
'author_name', self.author_name))
Du kan kontrollera att om du skapar en lista med 2 böcker med samma författare och titel, kommer bokobjekten att vara desamma (med lika (med is
operatör) och==
operatör). Även när set()
används, tar den bort en bok.
REDIGERA :Det här är ett gammalt svar av mig, men jag märker först nu att det har felet som korrigeras med genomstrykning i sista stycket:objekt med samma hash()
ger inte True
jämfört med is
. Hashbarhet för objekt används dock om du tänker använda dem som element i uppsättningen eller som nycklar i ordboken.