Curried class methods?
Carl Banks
pavlovevidence at gmail.com
Thu Aug 17 12:43:52 EDT 2006
Scott Lamb wrote:
> I'm trying to dynamically generate class methods which have access to
> some state passed in at creation time. (Basically as a workaround to
> twisted's trial not having a way to dynamically add stuff. Plain
> unittest seems to have TestSuite, but the trial runner doesn't know
> about it.)
>
> My first attempt might better illustrate this -
>
> class Foo:
> def generalized(self, ctx):
> print 'my ctx is %r' % ctx
>
> for i in ['a','b','c']:
> setattr(Foo, i, lambda self: self.generalized(i))
>
> foo = Foo()
> foo.a()
> foo.b()
> foo.c()
>
> but this prints "my ctx is c" three times; I'd hoped for a, b, c, of
> course.
def build(j):
setattr(Foo, j, lambda self: self.generalized(j))
for i in ["a","b","c"]:
build(i)
Each call of the the build function creates its own cell "j" that the
lambda references.
Carl Banks
More information about the Python-list
mailing list