Terry Reedy wrote: > "Ron Adam" <[EMAIL PROTECTED]> wrote in message > news:[EMAIL PROTECTED] > >>Actually I think I'm getting more confused. At some point the function >>is wrapped. Is it when it's assigned, referenced, or called? > > > When it is referenced via the class.
Ok, that's what I suspected. Thanks for clarifying this. > If you lookup in class.__dict__, the function is still a function. Now why did I not think of doing that? :-) >>>>class C(object): > > ... def meth(self): pass > ... > >>>>C.__dict__['meth'] > > <function meth at 0x0090B018> > >>>>C.meth > > <unbound method C.meth> > >>>>C().meth > > <bound method C.meth of <__main__.C object at 0x008E4688>> Ok, I got it now. Given class 'C' below, i.m(1) does.... >>> class C(object): ... def m(self, x): ... return repr(x) ... >>> i = C() >>> boundmeth = i.__getattribute__('m') >>> boundmeth <bound method C.m of <__main__.C object at 0x009D1C70>> >>> boundmeth(1) '1' >>> import dis >>> dis.dis(boundmeth) 3 0 LOAD_GLOBAL 0 (repr) 3 LOAD_FAST 1 (x) 6 CALL_FUNCTION 1 9 RETURN_VALUE >>> dis.dis(C.m) 3 0 LOAD_GLOBAL 0 (repr) 3 LOAD_FAST 1 (x) 6 CALL_FUNCTION 1 9 RETURN_VALUE >>> dis.dis(C.__dict__['m']) 3 0 LOAD_GLOBAL 0 (repr) 3 LOAD_FAST 1 (x) 6 CALL_FUNCTION 1 9 RETURN_VALUE Hmm... that didn't tell me anything. (?) >>> boundmeth <bound method C.m of <__main__.C object at 0x009D1C70>> >>> C.m <unbound method C.m> >>> C.__dict__['m'] <function m at 0x009D6930> Time to start digging around in the source code I guess. ;-) > I am not sure, without looking, how much of this is language definition and > how much CPython implementation, but I think mostly the latter, as long as > the inheritance tree lookup behavior is as specified. > > Terry J. Reedy Yes, it hard to tell sometimes where CPython ends and Python begins. Cheers, Ron -- http://mail.python.org/mailman/listinfo/python-list