Need to call functions/class_methods etc using string ref :How
Bruno Desthuilliers
bdesth.quelquechose at free.quelquepart.fr
Fri Nov 30 14:15:35 EST 2007
George Sakkis a écrit :
> On Nov 26, 2:04 pm, Bruno Desthuilliers
>
> <bdesth.quelquech... at free.quelquepart.fr> wrote:
>
>>Donn Ingle a écrit :
>>
>>
>>>>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!
>>
>>>Yes, I suggested to him (by email) this:
>>
>>>thisinstance = SomeObject.__class__.__dict__
>>><Then you have a list of strings that may be function names, so:>
>>
>>This will only get attributes defined in SomeObject.__class__ - not the
>>one defined in the parent classes. Nor methods dynamically bound to a
>>specific instance.
>>
>>
>>
>>
>>>for f in yourlist:
>>> if f in thisinstance: eval(f)(params)
>>
>>>Which would vet the functions too.
>>
>>You *still* don't need eval here.
>>
>>target = <module or any other objet here>
>>for funcname in funclist:
>> func = getattr(target, funcname, None)
>> if callable(func):
>> func(*args, **kwargs)
>>
>>I've almost never had a real use case for eval (or exec) in 7 years.
>
>
> That's not to say there aren't any.
Indeed. But most of the time, I found that Python provides a more
appropriate solution.
> In one project I'm using exec to
> parse user provided function bodies from a web interface into real
> python functions (the function signatures are auto generated).
A problem I've never had to solve so far, so you're the expert here -
but what about compiling the source with compile, then instanciating a
function object from it ?
(snip)
More information about the Python-list
mailing list