の代わりに演算子 'is'を使用したいと思いましょう。同じクラスの2つのオブジェクトobjAとobjBがあります。彼らの関係は以下の通りです:私はPythonの辞書のキーとして両方のオブジェクトを使用する場合はPython dictでキーの比較方法を変更できますか? ==
(objA == objB) #true
(objA is objB) #false
、それらは同じ鍵であると考え、お互いに上書きされます。 dictコンパイラを==
の代わりにis
の比較を使用するようにオーバーライドする方法はありますか?そのため、2つのオブジェクトはdictの別のキーと見なされますか?
多分私はクラスまたは何かのequalsメソッドをオーバーライドできますか?具体的には、BeautifulSoup4ライブラリの2つの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
私の意見では、dictクラスをオーバーライドしようとするのではなく、オブジェクトのequalメソッドをオーバーライドしたり、必要であればオブジェクトのラッパーを提供することもできます。 – Ding