Bạn muốn có một loại có nguồn gốc với các ngữ nghĩa bình đẳng khác nhau. Thông thường, cách tiếp cận được thực hiện sẽ là xác định cách thức hoạt động bình đẳng, sau đó xây dựng phương thức băm từ các cấu trúc xuất phát ở đó, vì nó là cần thiết rằng hàm băm đồng ý với sự bình đẳng. Đó có thể là:
import collections
class FrequencyString(str):
@property
def normalized(self):
try:
return self._normalized
except AttributeError:
self._normalized = normalized = ''.join(sorted(collections.Counter(self).elements()))
return normalized
def __eq__(self, other):
return self.normalized == other.normalized
def __hash__(self):
return hash(self.normalized)
Tôi muốn sử dụng lớp trình bao bọc. Đó là tốt đẹp và rõ ràng và sẽ không gây nhầm lẫn bằng cách giả vờ là một chuỗi nhưng băm hoàn toàn khác nhau. – millimoose
@millimoose điểm tốt – darksky
Trộn 'str' và' custom_str' trong vùng chứa sử dụng hàm băm làm khóa có thể thú vị :) –