On Thu, Feb 9, 2012 at 2:48 PM, Emeka <emekami...@gmail.com> wrote: > I am trying to see if I could get more of Python without being insane.
Oh, I thought insanity was a prerequisite... anyway. > print Boo.__dict__ > > {'__module__': '__main__', 'ball': <function ball at 0x286e9b0>, 'daf': > <function daf at 0x286e938>, '__dict__ ......} > > print hex(id(Boo.daf)) > 0x27de5a0 > > My question is why is it that the id of Boo.daf is different from daf's hex > value in the above dict? Take no notice of the exact value of id(). It is an opaque value that shouldn't be relied upon for anything. That said, though, I tried your example in my two Windows Pythons, 2.6.5 and 3.2; in 3.2, the behavior is most like what you seem to be accepting: >>> Boo.__dict__ dict_proxy({'__module__': '__main__', 'ball': <function ball at 0x00FCBCD8>, 'daf': <function daf at 0x00FCBC90>, '__dict__': <attribute '__dict__' of 'Boo' objects>, '__weakref__': <attribute '__weakref__' of 'Boo' objects>, '__doc__': None, '__init__': <function __init__ at 0x00FCBC48>}) >>> hex(id(Boo.daf)) '0xfcbc90' >>> Boo.daf <function daf at 0x00FCBC90> Same number everywhere. But 2.6.5 has a difference that might give you a hint: >>> print Boo.__dict__ {'__module__': '__main__', 'ball': <function ball at 0x011BDC70>, 'daf': <function daf at 0x011BDC30>, '__dict__': <attribute '__dict__' of 'Boo' objects>, '__weakref__': <attribute '__weakref__' of 'Boo' objects>, '__doc__': None, '__init__': <function __init__ at 0x011BDBB0>} >>> Boo.daf <unbound method Boo.daf> daf is not a function, it's a special object for an unbound method. The exact identity of it is not necessarily useful; and buried inside it is the actual function that you defined: >>> hex(id(Boo.daf)) '0x11b5c10' >>> hex(id(Boo.daf.im_func)) '0x11bdc30' And that seems to be the number that's given in the repr(). But mainly, don't rely on id() for anything beyond uniqueness against all current objects. ChrisA -- http://mail.python.org/mailman/listinfo/python-list