day30 小面試題 去重 (考核 __eq__ 以及 __hash__ )
阿新 • • 發佈:2018-11-10
1 # 小面試題,要求將一個類的多個物件進行去重 2 # 使用set方法去重,但是無法實現,因為set 需要依賴eq以及hash, 3 # hash 雜湊的是記憶體地址, 必然不一樣 4 # eq 比較的也是記憶體地址,必然也不一樣 5 # 因此需要對 hash 和 eq 的功能進行更改 6 7 class A: 8 def __init__(self, name, sex, age): 9 self.name = name 10 self.sex = sex 11 self.age = age 12 13 def__hash__(self): 14 return hash(self.name + self.sex) 15 16 def __eq__(self, other): 17 if self.name == other.name and self.sex == other.sex: 18 return True 19 return False 20 21 22 a = A("egg", "nan", 18) 23 b = A("egg", "nan", 18) 24 print(set((a, b))) #set 依賴物件的hash eq 方法