Kirk McDonald wrote: > I think it's perfectly consistent: > > >>> class B(object): > ... def bar(self): pass > ... > >>> B.bar > <unbound method B.bar> > >>> type(B.bar) > <type 'instancemethod'> > >>> b = B() > >>> b.bar > <bound method B.bar of <__main__.B object at 0xb7bd544c>> > >>> type(b.bar) > <type 'instancemethod'> > >>> id(B.bar) > -1211888788 > >>> id(b.bar) > -1211888788 > > It's the same function, whether it's bound or not. Thus, it should > always have the same type.
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 -- http://mail.python.org/mailman/listinfo/python-list