operator.attrgetter
attrgetter
returns a callable that fetches the attribute given as parameter. It can fetch one or more
attributes, and can also follow relations within objects. See example:
In [1]: class Job:
...: def __init__(self, role, company_name):
...: self.role = role
...: self.company_name = company_name
...:
In [2]: class Person:
...: def __init__(self, first_name, last_name, job):
...: self.first_name = first_name
...: self.last_name = last_name
...: self.job = job
...:
In [3]: j = Job('Software Engineer', 'Foo Inc.')
In [4]: p = Person('John', 'Doe', j)
In [5]: from operator import attrgetter
In [6]: attrgetter('first_name')(p)
Out[6]: 'John'
In [7]: attrgetter('first_name', 'last_name')(p)
Out[7]: ('John', 'Doe')
In [8]: attrgetter('job.company_name')(p)
Out[8]: 'Foo Inc.'
It can be used to build a nested version of getattr.
from operator import attrgetter
def getnestedattr(obj, path, default=None):
try:
return attrgetter(path)(obj)
except AttributeError:
return default