You may not be aware of it, but what you're trying to do is called "currying"; you might want to search the Python Cookbook for recipes on it.
Or look for "partial function application" which has been argued to be the correct term for this use... Also see PEP 309:
http://www.python.org/peps/pep-0309.html
With an appropriately defined "partial" (I've taken the one from the PEP and added the descriptor machinery necessary to make it work as an instancemethod):
-------------------- functional.py -------------------- class partial(object): def __init__(*args, **kwargs): self = args[0] try: self.fn = args[1] except IndexError: raise TypeError('expected 2 or more arguments, got ' % len(args)) self.args = args[2:] self.kwargs = kwargs def __call__(self, *args, **kwargs): if kwargs and self.kwargs: d = self.kwargs.copy() d.update(kwargs) else: d = kwargs or self.kwargs return self.fn(*(self.args + args), **d) def __get__(self, obj, type=None): if obj is None: return self return partial(self, obj)
-------------------------------------------------------
py> class C(object): ... pass ... py> def func(self, arg): ... return arg ... py> lst = ['a', 'b', 'c'] py> for item in lst: ... setattr(C, item, functional.partial(func, arg=item)) ... py> c = C() py> c.a(), c.b(), c.c() ('a', 'b', 'c')
STeVe -- http://mail.python.org/mailman/listinfo/python-list