On Dec 21, 10:24 am, Nathan Rice <nathan.alexander.r...@gmail.com> wrote: > The idea is to provide a syntax that lets you do very complex things > on collections in a more readable manner, without having 5 or 6 lines > of generator expressions.
Have you seen PyLINQ? It has a similar approach to operating on collections, returning a PyLINQ object after each call to facilitate chaining. https://github.com/kalessin/PyLINQ/blob/master/pylinq/linq.py This is a personal opinion on the code, but I'd move instantiating the new ElementwiseProxy out of each method and into its own decorator: # declare this outside of the class def chainable(fn): def _(self, *args, **kwargs): return ElementwiseProxy(fn(self, *args, **kwargs), self) return _ This way, each method that is chainable is a little more obvious without inspecting the code, and the method body itself is only doing what the method says it does: @chainable def __add__(self, other): return (e + other for e in object.__getattribute__(self, "iterable")) Incidentally, displaying an ElementwiseProxy instance doesn't go down well with iPython: In [1]: from elementwise import * In [2]: e = ElementwiseProxy(['one','two','three']) In [3]: e Out[3]: ERROR: An unexpected error occurred while tokenizing input The following traceback may be corrupted or invalid The error message is: ('EOF in multi-line statement', (6, 0)) -- http://mail.python.org/mailman/listinfo/python-list