Kent Johnson wrote: > Kirk McDonald wrote: ... >> >>> id(B.bar) >> -1211888788 >> >>> id(b.bar) >> -1211888788 >> >> It's the same function, whether it's bound or not.... > > No, it's not the same function. You got the same id because you didn't > bind B.bar and b.bar to anything so the id was reused. > > >>> class B(object): > ... def bar(self): pass > ... > >>> Bbar = B.bar > >>> bbar = B().bar > >>> Bbar > <unbound method B.bar> > >>> bbar > <bound method B.bar of <__main__.B object at 0x008759B0>> > >>> id(Bbar) > 10751312 > >>> id(bbar) > 10736624 > >>> Bbar is bbar > False > > Kent
To elaborate on this, once 'id' is called, you drop the reference. This allows quite surprising things like: >>> id(7**8) == id(8**7) True >>> a, b = 7**8, 8**7 >>> id(a) == id(b) # this time there are other references to a and b False If you wanted to test the original code for identity match: >>> B.bar is B().bar False is the appropriate test (the 'is' test holds the identities through the comparison). By the by, this is tricky stuff, nobody should expect to understand it thoroughly without both study and testing. --Scott David Daniels [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list