假設我有兩個同一類的對象:objA和objB。他們的關係是這樣的:我可以在Python字典中更改鍵的對比方式嗎?我想使用運算符'is'而不是==
(objA == objB) #true
(objA is objB) #false
如果我使用這兩個對象在Python字典鍵,那麼他們將被視爲相同的密鑰,並且相互覆蓋。有沒有辦法來覆蓋字典比較器使用is
而不是==
比較,以便這兩個對象將被視爲字典中的不同鍵?
也許我可以重寫類中的equals方法或什麼?更具體地說,我正在討論BeautifulSoup4庫中的兩個Tag對象。
下面是我在說什麼更具體的例子:你要重寫操作==
from bs4 import BeautifulSoup
HTML_string = "<html><h1>some_header</h1><h1>some_header</h1></html>"
HTML_soup = BeautifulSoup(HTML_string, 'lxml')
first_h1 = HTML_soup.find_all('h1')[0] #first_h1 = <h1>some_header</h1>
second_h1 = HTML_soup.find_all('h1')[1] #second_h1 = <h1>some_header</h1>
print(first_h1 == second_h1) # this prints True
print(first_h1 is second_h1) # this prints False
my_dict = {}
my_dict[first_h1] = 1
my_dict[second_h1] = 1
print(len(my_dict)) # my dict has only 1 entry!
# I want to have 2 entries in my_dict: one for key 'first_h1', one for key 'second_h1'.
請用例子提供預期的輸出,因爲你所要求的不是一般的東西。 –
你不能重寫對象本身的equals方法嗎? – Carcigenicate
在我看來,你可能會重寫對象的平等方法,或者甚至爲對象提供一個包裝器(如果有必要的話),而不是試圖重寫字典類。 – Ding