basic language question
Jacek Generowicz
jacek.generowicz at cern.ch
Fri Sep 5 08:31:27 EDT 2003
Stephan Diehl <stephan.diehl at gmx.net> writes:
> Stephan Diehl wrote:
>
> > Terry Reedy wrote:
> >
> >> 'Returners' could wrap no-return mutators with functions or
> >> derived-class methods that do return the object, but I have never seen
> >> anyone post a complete module that does so for, say, all list
> >> mutators.
> >
> > That's actually a nice idea. I might just do that.
>
> o.k., the following short code would give you a list class, that returns
> 'self' when invoking any of the mutating methods.
OK, here's a variaton on the theme, just wraps the object in-place in
a way which makes it return self. This way you can get the desired
effect on any object you get, without pre-meditation, so you can still
fit the call chain on one line (wasn't that the point?)
> The solution involves a metaclass
Mine avoids them altogether.
> and I wouldn't consider this code more as an example than an
> industrial strength solution
Ditto.
class returner:
def __init__(self, object):
self.object = object
def __getattr__(self, name):
def proxy(*args, **kwds):
getattr(self.object, name)(*args, **kwds)
return self.object
return proxy
lst = [1,2,3]
print lst.append(4) # Here you get None
print returner(lst).append(5) # Here you get the modified list.
More information about the Python-list
mailing list