Gabriel Rossetti wrote:
Bruno Desthuilliers wrote:
Gabriel Rossetti a écrit :
I thought that since functions are objects, that I could obtain it's
nested functions.
Well, there's probably a very hackish way, but it's not worth the
pain.
What Bruno meant here, I believe, is that there is probably a hackish
way to get the nested functions, but it indeed would not be worth the pain.
>> The fact that functions are objects doesn't make nested
functions methods of that object.
A def statement is ultimately an assignment statement. The name of the
nested function is a local variable just like any other local name.
>> If what you really want are methods,
then you can write your own callable:
class _Test(object):
def request(self, params):
pass
def submit(self, params, values):
pass
def update(self, params, values):
pass
def delete(self, params):
pass
def __call__(self, action, *args):
return resultToXml(getattr(self, action)(*args))
_test = _Test()
Yes, very hackish :-)
No, not at all hackish, but one standard way to do what you want.
locals() is your friend.
def _test(self, action, *args):
def request(params):
pass
def submit(params, values):
pass
def update(params, values):
pass
def delete(params):
pass
result = locals()[action](*args)
return resultToXml(result)
Ok, thanks, that works :-), like I told Gabriel G., I keep on forgetting
locals() exists :-)
Unlike the class approach, this requires recreating the constant
functions and dict with each call to _test. Quick to write but a bit
'dirty', in my opinion. Another standard idiom is to set up the
constants outside the function:
def request(params):
pass
def submit(params, values):
pass
def update(params, values):
pass
def delete(params):
pass
dispatch = {'request':request, 'submit':submit, 'update':update,
'delete':delete}
def _test(self, action, *args):
return resultToXmo(dispatch[action](*args))
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list