apply()?

Fredrik Lundh fredrik at pythonware.com
Mon Dec 5 18:57:51 EST 2005


Ron Griswold wrote:

> I'm almost positive I've seen a function somewhere that will call a
> method of an object given the method's name. Something like:
>
> apply(obj, "func_name", args)
>
> is equivalent to:
>
> obj.func_name(args)
>
> For some reason I thought this was the apply function, but that doesn't
> appear to be the case. Can someone point me in the right direction?

sounds like you're looking for getattr (get attribute):

    func = getattr(obj, "func_name")
    result = func(args)

or, in one line:

    result = getattr(obj, "func_name")(args)

a common pattern is

    try:
        func = getattr(obj, "func_name")
    except AttributeError:
        ... deal with missing method ...
    else:
        result = func(args)

(this makes sure that an AttributeError raise inside the method isn't
confused with an AttributeError raise by getattr).

another pattern is

    func = getattr(obj, "func_name", None)
    if func:
        func(args)

which only calls the method if it exists.  here's a variation:

    func = getattr(obj, "func_name", None)
    if callable(func):
        func(args)

hope this helps!

</F>






More information about the Python-list mailing list