R. David Murray wrote: > On Wed, 1 Apr 2009 at 13:12, Chris Withers wrote: >> Guido van Rossum wrote: >>> Well hold on for a minute, I remember we used to have an exec >>> statement in a class body in the standard library, to define some file >>> methods in socket.py IIRC. >> >> But why an exec?! Surely there must be some other way to do this than >> an exec? > > Maybe, but this sure is gnarly code: > > _s = ("def %s(self, *args): return self._sock.%s(*args)\n\n" > "%s.__doc__ = _realsocket.%s.__doc__\n") > for _m in _socketmethods: > exec _s % (_m, _m, _m, _m) > del _m, _s I played around with this and managed to rewrite it as: from functools import partial from new import instancemethod def meth(name,self,*args): return getattr(self._sock,name)(*args) for _m in _socketmethods: p = partial(meth,_m) p.__name__ = _m p.__doc__ = getattr(_realsocket,_m).__doc__ m = instancemethod(p,None,_socketobject) setattr(_socketobject,_m,m) Have I missed something or is that a suitable replacement that gets rid of the exec nastiness? Chris -- Simplistix - Content Management, Zope & Python Consulting - http://www.simplistix.co.uk
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4