I was reading this: http://stackoverflow.com/questions/4418741/im-able-to-use-a-mutable-object-as-a-dictionary-key-in-python-is-this-not-disa
In a User Defined Type, one can provide __hash__ that returns a integer as a key to a dictionary. so: d = { key : value } What is the significance of __eq__ in this regard? Why does the article state: "A class that overrides __eq__() and does not define __hash__() will have its __hash__() implicitly set to None. ' Is this behavior like __len__ and __bool__ wrt Boolean Expressions? If one does: if x < y and __bool__ is not defined then __len__ is checked. Here, if __hash__ is undefined __eq__ is checked? What does he mean by 'overrides __eq__'?? Also didn't follow this " For classes you write, this method defaults to returning a value based off id(self), and *********** if equality is not determined by identity for those classes, you may be surprised by using them as keys: *******************" "The requirement is that the hash of an object doesn't change over time, and ********* that it keeps comparing equal (==) with its original value. **************************" Also if one can do x.a = 10 or 20 or whatever, and the class instance is mutable, then why do books keep stating that keys need to be immutable? After all, __hash__ is the guy doing all the work and maintaining consistency for us. One could do: class Fruit: editable_value = '' def __hash__(self): if 'apple' in self.value: return 10 elif 'banana' in self.value: return 20 and use 'apple' 'bannana' as keys for whatever mutable data.. Are the books wrong? -- https://mail.python.org/mailman/listinfo/python-list