Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to dynamically call a method in python?

I would like to call an object method dynamically.

The variable "MethodWanted" contains the method I want to execute, the variable "ObjectToApply" contains the object. My code so far is:

MethodWanted=".children()"

print eval(str(ObjectToApply)+MethodWanted)

But I get the following error:

exception executing script
  File "<string>", line 1
    <pos 164243664 childIndex: 6 lvl: 5>.children()
    ^
SyntaxError: invalid syntax

I also tried without str() wrapping the object, but then I get a "cant use + with str and object types" error.

When not dynamically, I can just execute this code to get the desired result:

ObjectToApply.children()

How to do that dynamically?

like image 562
I want badges Avatar asked Jul 18 '13 14:07

I want badges


1 Answers

Methods are just attributes, so use getattr() to retrieve one dynamically:

MethodWanted = 'children'

getattr(ObjectToApply, MethodWanted)()

Note that the method name is children, not .children(). Don't confuse syntax with the name here. getattr() returns just the method object, you still need to call it (jusing ()).

like image 146
Martijn Pieters Avatar answered Sep 22 '22 16:09

Martijn Pieters