On 2006-08-17, Scott Lamb <[EMAIL PROTECTED]> 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. After reading
><http://mail.python.org/pipermail/python-list/2004-July/229478.html>, I
> think I understand why this is - "i" doesn't actually get added to each
> new function's context; they just reference the global one. Even if I
> do this:

Try this instead as the for loop

    for i in ['a','b','c']:
        setattr(Foo, i, lambda self, a=i: self.generalized(a))

-- 
Antoon Pardon
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to