Y a-t-il un moyen de faire une liste de classes se comporter comme un ensemble en python? Fondamentalement, je travaille sur un morceau de logiciel qui fait une comparaison de chaîne impliquée, et j'ai une classe personnalisée pour manipuler les chaînes. Par conséquent, il existe une instance de la classe pour chaque chaîne. En conséquence, j'ai une grande liste contenant toutes ces classes. Je voudrais pouvoir y accéder comme list[key]
, où dans ce cas, la clé est une chaîne dont la classe est basée sur (note: la chaîne ne changera jamais une fois que la classe est instanciée, elle devrait donc être gérable).Python - Accéder à une classe à partir d'une liste à l'aide d'une clé
Il me semble que je devrais être en mesure de le faire un peu facilement, en ajoutant quelque chose comme __cmp__
à la classe, mais soit je suis obtuse (probable), ou il me manque quelque chose dans les docs.
Fondamentalement, je veux être en mesure de faire quelque chose comme ceci (exemple rapide 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>
Merci!
Modifier Quelques Tweaks supplémentaires:
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"]
Un SET utilise des index, pas des clés.Un dictionnaire semble être plus ce que vous voulez, mais vous utilisez un passage dans une clé d'un ("Bonjour"), et en essayant de le récupérer en utilisant une valeur différente - "Bonjour". –
Vous devez également définir la méthode \ _ \ _ cmp \ _ \ _ pour la classe __a__ qui sera appelée dans le cas de collisions de valeurs de hachage. – Yaroslav
Veuillez utiliser les noms UpperCase pour les classes. S'il vous plaît hériter de l'objet. Comme ceci: 'class A (object)'. Cela rendra beaucoup de choses plus faciles à lire pour nous et plus faciles à comprendre pour vous aussi. –