summary: (was: callback + __call__ + TypeError: unbound method; on non method)

Volker Apelt gq437x at yahoo.de
Wed Sep 25 04:05:42 EDT 2002


## Thank you, Alex Martelli for your help on this problem. 

Problem: 
  Python 2.1.1. took a reference to a function
  stored in a class attribute as a class method.
  Calling that function through an object instance 
  was not possible. 

Solution for 2.2 + Workaround for python < 2.2:
  In Python 2.2 use staticmethod(). 
  For Python < 2.2 (eg: tested with 2.1.1) use a 
  class replacement for staticmethod and add a second
  group of () to the call. 

Example:

import time

def call_me():
    return time.time

## workaround for python < 2.2   
class staticmethod:
    def __init__(self, func): self.func = func
    def __call__(self, *args, **kwds): return self.func(*args, **kwds)
   
class Callback_good:
    """
    """
    _default_Func = staticmethod(call_me) #class wide default callback function
    
    def __init__(self): 
        """ """
        self._m_func = Callback_good._default_Func
        
    def __call__(self): 
        """ """
        # uncomment one of these
        #return self._m_func()() # for python < 2.2
        #return self._m_func()   # for ptyton >= 2.2

x = Callback_good()

## both prints are equal
print time.time 
print x()


-- 
Volker Apelt                   






More information about the Python-list mailing list