code explanation
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Mon Jan 14 23:38:09 EST 2013
On Mon, 14 Jan 2013 23:00:16 -0500, Rodrick Brown wrote:
> Can someone explain what's going on here.
>
> def _build_magic_dispatcher(method):
> def inner(self, *args, **kwargs):
> return self.__dict__[method](*args, **kwargs)
> inner.__name__ = method
> return inner
>
> Thanks.
This is a factory function, probably intended to be used as a decorator:
class K:
@_build_magic_dispatcher
def something(self, x, y, z): ...
except that it appears to be broken. It seems to be expecting a *string*,
the name of a method, despite the function parameter claiming to require
a method itself. So maybe you use it like this:
class K:
def __init__(self):
self.parrot = _build_magic_dispatcher("parrot")
or something similar. Without seeing the context, it's hard for me to
tell whether it works or is broken. I suspect it is broken, or useless,
or both.
So, this factory function seems to take the *name* of a method as
argument. Then it builds an inner method, which accepts arbitrary
arguments (args and kwargs), renames the inner method to the name you
passed as argument, and returns it.
The inner method simply looks up an attribute with the same name, and
calls it as a function with whatever args and kwargs it gets.
Does this help?
--
Steven
More information about the Python-list
mailing list