Like __getattr__ but with args and kwargs as well

Giampaolo Rodolà g.rodola at gmail.com
Fri May 28 13:08:01 EDT 2010


I know, the title doesn't say much, but I had no better ideas. =)
I have a class within a serie of redundant methods, which looks like this:

class MixedAuthorizer:

    def __init__(self, *args):
        # expected a list of class instances
        self.authorizers = args

    def get_home(self, user):
        for auth in self.authorizers:
            if not auth.has_user(user):
                continue
            return auth.get_home(user)
        return ""

    def get_password(self, user):
        for auth in self.authorizers:
            if not auth.has_user(user):
                continue
            return auth.get_password(user)
        return ""

     # follows a long list of get_* methods as above
     ...


Considering that I always do the same thing (iterate over a list of
objects -> call obj.has_user() -> call obj.get_*()) I would like to
know if there's a more compact way to do that.
What I basically need is something like __getattr__ but which provides
the arguments and eventually the keyword arguments a method has been
called with, other than just its name.
Actually I'm not even sure whether Python can reach such a level of
dynamism but I wanted to give it a try anyway.
Is there a way to do such a thing?


--- Giampaolo
http://code.google.com/p/pyftpdlib
http://code.google.com/p/psutil



More information about the Python-list mailing list