python中的set實(shí)現(xiàn)不重復(fù)的排序原理
最近在嘗試寫(xiě)選課系統(tǒng)的時(shí)候遇到一個(gè)問(wèn)題:
1、存在兩個(gè)類(lèi) School、Teacher ;
2、School實(shí)例中包含多個(gè)Teacher的實(shí)例,但又不可重復(fù)
本人想到在School中用set()存儲(chǔ),但是添加Teacher實(shí)例的時(shí)候做不到去重,后來(lái)猜測(cè)應(yīng)該是set會(huì)自動(dòng)調(diào)用__eq__方法比較對(duì)象是否重復(fù),因此重寫(xiě)了該方法:
def __eq__(self, other): return self.name == other.name
結(jié)果仍然報(bào)錯(cuò)TypeError: unhashable type,如下:

研究了很久,發(fā)現(xiàn)Teacher無(wú)法hash的原因是該類(lèi)中缺少__hash__方法,導(dǎo)致解釋器不知道如何哈希該對(duì)象,添加以下代碼后問(wèn)題解決:
def __hash__(self):
return hash(self.name)
綜上發(fā)現(xiàn):
如果想要將對(duì)象用set去重,需要重寫(xiě)__eq__和__hash__兩個(gè)方法。
總結(jié)
以上所述是小編給大家介紹的python中的set實(shí)現(xiàn)不重復(fù)的排序原理,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Python連接到PostgreSQL數(shù)據(jù)庫(kù)的方法詳解
顧名思義,PostgreSQL?是一款為高效管理數(shù)據(jù)庫(kù)系統(tǒng)而創(chuàng)建的?SQL?系統(tǒng)軟件,這篇文章主要為大家詳細(xì)介紹了創(chuàng)建與?PostgreSQL?上的數(shù)據(jù)庫(kù)的連接的過(guò)程,需要的小伙伴可以了解下2023-10-10
Python單體模式的幾種常見(jiàn)實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Python單體模式的幾種常見(jiàn)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python單體模式的實(shí)現(xiàn)方法、原理與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-07-07
Python?numpy之線(xiàn)性代數(shù)與隨機(jī)漫步
這篇文章主要介紹了Python?numpy之線(xiàn)性代數(shù)與隨機(jī)漫步,線(xiàn)性代數(shù),矩陣計(jì)算,優(yōu)化與內(nèi)存;比如矩陣乘法,分解,行列式等數(shù)學(xué)知識(shí),是所有數(shù)組類(lèi)庫(kù)的重要組成部分2022-07-07
numpy數(shù)據(jù)類(lèi)型dtype轉(zhuǎn)換實(shí)現(xiàn)
這篇文章主要介紹了numpy數(shù)據(jù)類(lèi)型dtype轉(zhuǎn)換實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Python實(shí)現(xiàn)K折交叉驗(yàn)證法的方法步驟
這篇文章主要介紹了Python實(shí)現(xiàn)K折交叉驗(yàn)證法的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Python實(shí)現(xiàn)計(jì)算最小編輯距離
這篇文章主要介紹了Python實(shí)現(xiàn)計(jì)算最小編輯距離的相關(guān)代碼,有需要的小伙伴可以參考下2016-03-03
python os.path.isfile()因參數(shù)問(wèn)題判斷錯(cuò)誤的解決
今天小編就為大家分享一篇python os.path.isfile()因參數(shù)問(wèn)題判斷錯(cuò)誤的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
python利用dlib獲取人臉的68個(gè)landmark
這篇文章主要介紹了python利用dlib獲取人臉的68個(gè)landmark,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11

