J'ai une situation étrange. J'ai un dict, self.containing_dict
. En utilisant la sonde de débogage, je vois le contenu de dict et je peux voir que self
est une clé de celui-ci. Mais regardez ceci:Python: `key pas dans my_dict` mais` key dans my_dict.keys() `
>>> self in self.containing_dict
False
>>> self in self.containing_dict.keys()
True
>>> self.containing_dict.has_key(self)
False
Que se passe-t-il?
(je note que c'est un morceau de code qui est exécuté sur un rappel weakref.)
Mise à jour: on m'a demandé de montrer la mise en œuvre de __hash__
self
. Ici, il est:
def __hash__(self):
return hash(
(
tuple(sorted(tuple(self.args))),
self.star_args,
tuple(sorted(tuple(self.star_kwargs)))
)
)
args = property(lambda self: dict(self.args_refs))
star_args = property(
lambda self:
tuple((star_arg_ref() for star_arg_ref in self.star_args_refs))
)
star_kwargs = property(lambda self: dict(self.star_kwargs_refs))
est-ce qu'il arrive d'implémenter son propre '__hash__'? –
Etes-vous sûr que c'est vraiment un dict, et pas quelque chose avec juste la même interface? Qu'est-ce que 'self'? A-t-il un '__eq__' redéfini? –
Est-ce que 'self.containing_dict' est juste un Python' dict' ou quelque chose comme un 'weakref.WeakKeyDictionary'? Si les premiers, sont les clés ou les valeurs du dictre eux-mêmes weakrefs? – llasram