Как передать аргумент как метод модуля - PullRequest
0 голосов
/ 18 февраля 2011

Привет, я хочу вызвать f('append','more','arguments',a=1,b=2)

, но append - это метод (функция) pyquery module

, поэтому arg[0] - это мой метод

Я хочуmake

    e.arg[0]('<div id="cool"></div>') run like e.append('<div id="cool"></div>')

- поэтому я хочу передать "append" в качестве аргумента

    import pyquery
    d = pq('<div id="guido"></div>')
    d.append('<div id="cool"></div>')
    str(d)

    def f (*arg,**kargs):
        e = pq('<div id="guido"></div>')
        e.arg[0]('<div id="cool"></div>') # <== HERE
        return str(e)

    f('append','more','arguments',a=1,b=2)

so f ('append', 'more', 'arguments', a = 1, b= 2) должен вернуть

    '<div id="guido"><div id="cool"/></div>'

Ответы [ 2 ]

3 голосов
/ 18 февраля 2011

Я бы не рекомендовал передавать имена методов в строках, если вы можете избежать этого (вместо этого передать ссылку на сам метод), но если вы не можете, то вам нужно getattr(), функция, которая получает атрибутобъекта по имени, содержащемуся в строке.Это позволит вам получить ссылку на нужный метод, а затем вы сможете вызывать его как обычно.

def f (*arg, **kargs):
    e = pq('<div id="guido"></div>')
    getattr(e, arg[0])('<div id="cool"></div>')
    return str(e)
0 голосов
/ 18 февраля 2011

передайте d.append в качестве первого аргумента.Функции являются объектами первого класса!

...