chained attrgetter

Brian Beck exogen at gmail.com
Thu Oct 26 04:51:05 EDT 2006


Alexey Borzenkov wrote:
> Do you mean something like
>
> class cattrgetter:
>     def __init__(self, name):
>         self.names = name.split('.')
>     def __call__(self, obj):
>         for name in self.names:
>             obj = getattr(obj, name)
>         return obj

I'll raise you one:

def cattrgetter(attr):
   return lambda obj: reduce(getattr, attr.split('.'), obj)

py> class A: pass
py> a = A
py> a.b = A
py> a.b.c = "Hey!"
py> cattrgetter('b.c')(a)
'Hey!'

--
Brian Beck
Adventurer of the First Order




More information about the Python-list mailing list