Я использую пользовательские объекты в качестве ключей в словаре Python. Эти объекты имеют определенные методы hash и eq по умолчанию, которые используются при сравнении по умолчанию
Но в какой-то функции мне нужно использовать другой способ сравнения этих объектов.
Так есть ли способ переопределить или передать новый компаратор для сравнения этих ключей только для этой конкретной функции.
Обновлено: у моего класса есть следующий тип функциональности (здесь я не могу редактировать хэш метод, это сильно повлияет в других местах)
class test(object):
def __init__(self,name,city):
self.name=name
self.city=city
def __eq__(self,other):
hash_equality= (self.name==other.name)
if(not hash_equality):
#check with lower
return (self.name.lower()==other.name.lower())
def __hash__(self):
return self.name.__hash__()
my_dict={}
a=test("a","city1")
my_dict[a]="obj1"
b=test("a","city2")
print b in my_dict #prints true
c=test("A","city1")
print c in my_dict #prints false
print c in my_dict.keys() #prints true
# my_dict[c] throw error
Это нормальная функциональность. Но в одном конкретном методе я хочу переопределить / или передать новый пользовательский компаратор, где новый хэш код похож на
def __hash__(self):
return self.name.lower().__hash__()
так что c in my_dict
возвращает туру
или my_dict[c] will return "obj1"
Извините за столько обновлений.
Как и при сортировке, мы можем передать пользовательский метод в качестве компаратора, есть ли способ сделать то же самое здесь.