Giả sử tôi có hai đối tượng của cùng một lớp: objA và objB. Mối quan hệ của họ là như sau:Tôi có thể thay đổi cách thức so sánh các phím trong một Python dict? Tôi muốn sử dụng toán tử 'is' thay vì ==
(objA == objB) #true
(objA is objB) #false
Nếu tôi sử dụng cả hai đối tượng làm khóa trong Python, thì chúng sẽ được coi là khóa giống nhau và ghi đè lên nhau. Có cách nào để ghi đè lên bộ so sánh dict để sử dụng so sánh is
thay vì ==
sao cho hai đối tượng đó sẽ được xem là các khóa khác nhau trong dict?
Có lẽ tôi có thể ghi đè phương thức bằng trong lớp học hay gì đó? Để cụ thể hơn, tôi đang nói về hai đối tượng Tag từ thư viện BeautifulSoup4.
Dưới đây là một ví dụ cụ thể hơn về những gì tôi đang nói về:
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'.
Vui lòng cung cấp sản lượng dự kiến với ví dụ vì những gì bạn đang yêu cầu không phải là điều chung chung. –
Bạn không thể ghi đè phương thức bằng của đối tượng? – Carcigenicate
Theo ý kiến của tôi, thay vì cố gắng để ghi đè lên lớp dict, bạn có thể có thể ghi đè lên phương thức bình đẳng của đối tượng, hoặc thậm chí cung cấp một wrapper cho đối tượng nếu cần thiết. – Ding