Ron Provost wrote: > class X( object ): > fn = None > @staticmethod > def callX( n ): > return X.fn( n )
> Now, the following global stuff represents my higher-level routines: > def fn_impl( n ): # my callback > return n + 1 > X.fn = fn_impl # register my callback > Now I can do something which forces my callback (fn_impl) to get called > print X.callX( 3 ) > I think I would get '4' printed but instead get the above error. What > am I doing wrong? callX is a static method, so it does not require an instance as the first argument. However, that's not true for fn_impl. This line of code: > X.fn = fn_impl makes fn_impl an attribute of the class. If you call a function that is a class attribute, python creates a method out of the function. A method requires that the first argument be an instance. If you call the method through an instance, python automatically sends the instance as the first argument to the method. If you call the method using the class, then you have to supply the instance argument yourself. In this line: return X.fn( n ) You are calling a function that is a class attribute and you are calling it through the class, so you have to supply an instance as the first argument yourself. -- http://mail.python.org/mailman/listinfo/python-list