0
votes

Convertir défini sur un type hachable

J'ai des variables qui sont liées deux par deux, et je souhaite les stocker en tant qu'attributs d'objets de frères et sœurs ().

Donc, je crée une classe: p> xxx pré>

La raison pour laquelle j'utilise des ensembles dans EQ strong> est que je ne sais pas (et que je ne me soucie pas) quelle variable sera considérée comme frère et qui comme soeur. En fait, P>

a = {s1: 5}
a[s2] = 4


0 commentaires

3 Réponses :



2
votes

hachage avec un gelenget au lieu d'un tuple: xxx

non liée à la question, mais recommandé - vous devez éviter de retourner Aucun Dans le __ eq __ : xxx

Notez que le hachage ne doit pas changer dans la chronologie d'un objet. Tant que vous n'écrivez pas dans le _Brother et _ster attributs après init, vous devez être en sécurité.


2 commentaires

Merci beaucoup pour la solution et la suggestion. Time d'attente Lapsus accepter votre réponse.


Merci pour le commentaire supplémentaire.



1
votes

Au fur et à mesure que d'autres réponses ont déjà signalé, en utilisant FROZENSET est Une approche valide, un autre choix utile pour ces types de cas envisage d'utiliser NamedTuples , exemple ci-dessous:

from collections import namedtuple

BaseSiblings = namedtuple('Siblings', 'brother sister')


class Siblings(BaseSiblings):

    def __hash__(self):
        return super().__hash__()

    def __eq__(self, other):
        if isinstance(other, Siblings):
            return {self.brother, self.sister} == {other.brother, other.sister}

        return NotImplemented

obj1 = Siblings('a', 'b')
print(obj1)
obj2 = Siblings('b', 'a')
print(obj2 == obj1)
print({obj1: '1'} == {obj2: '1'})


1 commentaires

O.P. Veut que la commande est insensible à l'ordre, cependant.