getattr() on nested functions?

Gabriel Rossetti gabriel.rossetti at arimaz.com
Wed Aug 20 04:34:38 EDT 2008


Hello,

I can't get getattr() to return nested functions, I tried this :

 >>> def toto():
...     def titi():
...             pass
...     f = getattr(toto, "titi")
...     print str(f)
...
 >>> toto()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in toto
AttributeError: 'function' object has no attribute 'titi'
 >>>

I thought that since functions are objects, that I could obtain it's 
nested functions. How come it doesn't work and what can I do to 
fix/replace it? I'm using it in code that is like this :

def __test(self, action, *args):
        def request(params):
            pass
           
        def submit(params, values):
            pass
           
        def update(params, values):
            pass
           
        def delete(params):
            pass
       
        result = getattr(__test, action)(*args)
       
        return resultToXml(result)

where "action" is a string containing either "request", "submit", 
"update", or "delete". I was using an evel() with this form :

result = eval(action + "(params, values)")

but I didn't find that very clean.

Thank you,
Gabriel



More information about the Python-list mailing list