Re: Any built-in ishashable method ?

Discussion in 'Python' started by Dave Angel, Jan 18, 2013.

  1. Dave Angel

    Dave Angel Guest

    On 01/18/2013 05:36 AM, Jean-Michel Pichavant wrote:
    > Hello people,
    >
    > Is there any built-in way to know if an object is a valid dictionary key ? From what I know, the object must be hashable, and from the python doc, an object is hashable if it has the __hash__ and (__cmp__ or __eq__) methods.
    >
    > http://docs.python.org/2/glossary.html#term-hashable
    >
    > I found this on the net, but considering the above definition, does it really check the cmp/eq existence ?
    >
    > def ishashable(x):
    > try:
    > hash(x)
    > except TypeError:
    > return False
    > else:
    > return True
    >
    > I was trying to know if any custom class can be used as a dict key. It looks like you can. Yet I'm a little bit concerned, because last time I used invalid objects as keys, I got a bug that was really difficult to spot.
    >


    Yes, one can write custom classes whose objects may be used a dict key.
    The main conceptual requirement is the object be conceptually
    immutable. The way the class author indicates that is to define the two
    methods, __hash__() and __eq__(). (or __cmp__() I suppose)

    To avoid bugs, there are obviously some constraints on the semantics of
    those methods. Main ones are 1) that the hash value should not change
    over time, and 2) that if two instances are equal at one moment, that
    they stay so, and vice versa.



    --
    DaveA
    Dave Angel, Jan 18, 2013
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Peter Otten

    Re: Any built-in ishashable method ?

    Peter Otten, Jan 18, 2013, in forum: Python
    Replies:
    0
    Views:
    129
    Peter Otten
    Jan 18, 2013
  2. Terry Reedy

    Re: Any built-in ishashable method ?

    Terry Reedy, Jan 18, 2013, in forum: Python
    Replies:
    0
    Views:
    124
    Terry Reedy
    Jan 18, 2013
  3. Peter Otten

    Re: Any built-in ishashable method ?

    Peter Otten, Jan 18, 2013, in forum: Python
    Replies:
    0
    Views:
    125
    Peter Otten
    Jan 18, 2013
  4. Steven D'Aprano

    Re: Any built-in ishashable method ?

    Steven D'Aprano, Jan 18, 2013, in forum: Python
    Replies:
    0
    Views:
    132
    Steven D'Aprano
    Jan 18, 2013
  5. Terry Reedy

    Re: Any built-in ishashable method ?

    Terry Reedy, Jan 18, 2013, in forum: Python
    Replies:
    0
    Views:
    127
    Terry Reedy
    Jan 18, 2013
Loading...

Share This Page