Есть ли способ заставить список классов вести себя как набор в python?
По сути, я работаю над программным обеспечением, которое выполняет некоторое сравнение строк, и у меня есть собственный класс для обработки строк. Следовательно, для каждой строки существует экземпляр класса.
В результате у меня есть большой список, содержащий все эти классы. Я хотел бы иметь возможность получить к ним доступ, например list[key]
, где в этом случае ключ - это строка, на которой основан класс (примечание: строка никогда не изменится после создания экземпляра класса, поэтому она должна быть хэшируемой) .
Мне кажется, что я мог бы сделать это несколько легко, добавив что-то вроде __cmp__
в класс, но либо я тупой (вероятно), либо я что-то упустил в документах.
По сути, я хочу иметь возможность сделать что-то вроде этого (пример подсказки Python):
>>class a:
... def __init__(self, x):
... self.var = x
...
>>> from test import a
>>> cl = set([a("Hello"), a("World"), a("Pie")])
>>> print cl
set([<test.a instance at 0x00C866C0>, <test.a instance at 0x00C866E8>, <test.a instance at 0x00C86710>])
>>> cl["World"]
<test.a instance at 0x00C866E8>
Спасибо!
Редактировать Некоторые дополнительные настройки:
class a:
... def __init__(self, x):
... self.var = x
... def __hash__(self):
... return hash(self.var)
...
>>> v = a("Hello")
>>> x = {}
>>> x[v]=v
>>> x["Hello"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Hello'
>>> x["Hello"]