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