2013-07-18 4 views
1

Я хотел бы вызвать метод объекта динамически.Как динамически вызывать метод в python?

Переменная «MethodWanted» содержит метод, который я хочу выполнить, переменная «ObjectToApply» содержит объект. Мой код до сих пор:

MethodWanted=".children()" 

print eval(str(ObjectToApply)+MethodWanted) 

Но я получаю следующее сообщение об ошибке:

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

Я также попытался без ул() оборачивать объект, но затем я получаю «не могу использовать + с ул и типы объектов ".

Когда не динамически, я могу просто сделать:

ObjectToApply.children() 

И получить желаемый результат.

Как это сделать динамически?

ответ

7

Методы только атрибуты, поэтому используйте getattr() получить один динамически:

MethodWanted = 'children' 

getattr(ObjectToApply, MethodWanted)() 

Обратите внимание, что имя метода children, не .children(). Не путайте синтаксис с именем здесь. getattr() возвращает только объект метода, вам все равно нужно называть его (jusing ()).

+0

только что попробовал 'getattr (sysobj, 'path')' где 'sysobj' является объектом' sys'. Он работает без() в реальном. –

+0

@ManojAwasthi: Это потому, что 'sys.path' не является методом. Вы бы никогда не делали 'sys.path()'. –

+0

Вау, большое спасибо. Мне не хватало() в конце (coudlnt представьте, что это будет так) Работает отлично! –

Смежные вопросы