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