Diez B. Roggisch wrote: > Gabriel Rossetti schrieb: > >> Hello, >> >> I am using Partial Function Application in a class and I've come up with >> a problem, when the method is called it tries to pass "self" to the >> curried/partial function, but this should be the first argument in >> reality, but since the function is curried, then the self gets passed as >> the second argument. Here is the code : >> >> def __registerService(self, atomic, service): >> def reg(service): >> # registers the service >> ... >> if(atomic): >> # Lock the service dict and register the service, then unlock it >> self.__mutex.lock(reg, service) >> self.__mutex.unlock() >> else: >> reg(service) >> registerServiceAtomic = partial(__registerService, True) >> registerServiceNonAtomic = partial(__registerService, False) >> >> I should pass self when applying partial, but then I can't do that since >> self is not available there. Does anyone have any ideas? >> > > Use a bound-method instead. That has the self already bound to it. Like > this: > > > class Foo: > def m(self, arg): > print arg > > f = Foo() > partial(f.m, 10) > > > Diez >
Ok, thanks, I moved the partial defs to __init__() and now it seams to work (I still have a but elsewhere, but this part no longer gives an error : def __init__(): self.registerServiceAtomic = partial(self.__registerService, True) self.registerServiceNonAtomic = partial(self.__registerService, False) def __registerService(self, atomic, service): def reg(service): # registers the service ... if(atomic): # Lock the service dict and register the service, then unlock it self.__mutex.lock(reg, service) self.__mutex.unlock() else: reg(service) Thanks, Gabriel -- http://mail.python.org/mailman/listinfo/python-list