Partial Function Application and implicit self problem
Gabriel Rossetti
gabriel.rossetti at mydeskfriend.com
Thu Mar 27 04:30:17 EDT 2008
Gabriel Rossetti wrote:
> 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?
>
> Thanks,
> Gabriel
>
I also tried this :
def __registerService(atomic, self, 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)
thinking that the self will be passed as the first argument of the
registerService* calls and thus the second argument to the
curried/partial method, but it doesn't work either, I get :
Traceback (most recent call last):
File "/home/xxx/Documents/Code/Python/test/test_serv.py", line 245, in
test_registeration
self.f.registerServiceAtomic(self.serv)
exceptions.TypeError: __registerService() takes exactly 3 arguments (2
given)
I don't get it...
Gabriel
More information about the Python-list
mailing list