Need to call functions/class_methods etc using string ref :How

J. Clifford Dyer jcd at sdf.lonestar.org
Mon Nov 26 10:58:40 EST 2007


On Mon, Nov 26, 2007 at 04:07:03PM +0530, Ravi Kumar wrote regarding Need to call functions/class_methods etc using string ref :How:
> 
>    Hi,
>    First of all, since this is my first mail to Python-List, I want to say
>    "Hello world!"
>    After that;
>    I am stuck in a project. Actually I am writing a module (for testing
>    now), which takes URL, parses it, finds which modules and then which
>    method to call or which class to initiate and which string to load.
>    So far, I have done some basic URL manipulation and validation and
>    extracted the name of modules in  a dict
>    {
>      'ModuleName-1': None,
>      'ModuleName-2': None
>      --ETC--
>    }
>    Now I want your help about how to call the  function i.e _render() in
>    the module. I have to iterate it calling all modules/also Class.methods
>    and assinging the values in dict for each key as modulename.
>    Means,
>    just take that moduleName is a string which contains the name of module
>    to load.
>    FuncName is the string which contains the name of def <function> to
>    call
>    clName is the string which contains the name of the Class, which is to
>    init and get returned object.
>    means everything in string.
>    ALso, if there are multiple methods to do it, if you provide a little
>    pros/cons and comments, it would really be very nice of you.
>    Before I came here, I have searched Google, and found a way
>    hasattr()/getattr(), but that confused me a little and didnt worked for
>    me. I am missing something I know, so please ENLIGHTEN Me :)
>    Thanks in advance EVen you read this mail :P
>    --
>    -=Ravi=-

I see someone already showed you eval.  Eval is evil.  Don't use it.  Especially if the functions are coming to you from a public URL!  

You are on the right track putting the module names in a dictionary.  Now tie those dictionary keys to functions.

func = { 'function_a': function_a,
         'function_b': function_b }

now you can call them as follows, with the desired function name extracted from the URL into the variable f_request:

if f_request in func:
	result = func[f_request]()

This way, users can't call functions you haven't explicitly added to the func dictionary.

Cheers,
Cliff


> -- 
> http://mail.python.org/mailman/listinfo/python-list



More information about the Python-list mailing list