types acceptés comme key d'un dict [résolu] - Python - Programmation
Marsh Posté le 03-10-2005 à 20:21:49
Ptin mais arrête d'utiliser des underscores bordel, c'est incompréhensible
Et dériver MyClass (CamelCase stp) de list, ça veut dire qu'un objet de type MyClass est mutable. Ton objet Python n'est pas mutable, puisque ton "myclass_o" fait partie de la classe et non de l'objet.
Dernière question: quel intérêt ça a de se poser ces questions
Marsh Posté le 03-10-2005 à 22:51:41
> Masklinn (et Taz ) Merci du coup de main et désolé pour les ____, c'est vrai que ce n'est pas clair...
Pourquoi je me triture les méninges là-dessus ? Bah... par curiosité et parce ce que j'en ai marre de réécrire mon code. Ca m'arrive à chaque fois que j'utilise des techniques que je maîtrise mal : en l'occurence, ce qui hashable et ce qui ne l'est pas.
Marsh Posté le 03-10-2005 à 22:56:09
Ben si tu veux savoir ce qui est hashable et ce qui l'est pas, tu utilises la fonction "hash" dessus
>>> hash(tuple()) |
Accessoirement, je te recommande quelques petits trucs à faire:
En option, http://wiki.python.org/moin/ et http://the.taoofmac.com/space/Python/Grimoire
Marsh Posté le 03-10-2005 à 22:58:10
En effet c'est l'existence d'une méthode __hash__ valide (qui retourne un entier) qui détermine si l'objet sera utilisable comme clé dans un dictionnaire.
Mais rien ne t'empêche de foutre le bordel:
|
Marsh Posté le 03-10-2005 à 19:59:51
Bonsoir !
Je lis dans la doc python (http://python.org/doc/2.4.1/tut/no [...] 0000000000) que :
... dictionaries are indexed by keys, which can be any immutable type; strings and numbers can always be keys. Tuples can be used as keys if they contain only strings, numbers, or tuples; if a tuple contains any mutable object either directly or indirectly, it cannot be used as a key. You can't use lists as keys, since lists can be modified in place using their append() and extend() methods, as well as slice and indexed assignments.
Donc je n'ai pas le droit d'écrire :
d = { [1,2] : "mon machin pour 1,2" }
et effectivement Python me l'interdit (list object are unhashable)
Bon. De même il va de soi que ceci m'est interdit (et en effet, même message d'erreur)
class myclass(list):
____pass
d = { myclass() : "mon machin pour myclass()" }
Mais alors pourquoi Python me laisse-t-il écrire ceci ??? (pas d'erreur signalée) :
class myclass(object):
____myclass_o = []
d = { myclass() : "mon machin pour myclass()" }
myclass_o est bien un type mutable, non ? Est-ce Python qui ne voit pas le problème ou moi qui n'est pas compris la doc ?
edit : typos
Message édité par suizokukan le 03-10-2005 à 22:52:22
---------------
rule #1 : trust the python