Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: How to get attribute of attribute of an object with getattr?

How do I evaluate

a = myobject.id.number

and return None if it myobject is None

with built-in getattr? Maybe getattr(myobject, "id.number", None)?

like image 979
alwbtc Avatar asked Feb 17 '13 19:02

alwbtc


3 Answers

getattr(getattr(myobject, "id", None), "number", None)

should work.

like image 172
sidi Avatar answered Oct 11 '22 21:10

sidi


This should scale well to any depth:

reduce(lambda obj, attr : getattr(obj, attr, None), ("id","num"), myobject)
like image 7
StoryTeller - Unslander Monica Avatar answered Oct 11 '22 22:10

StoryTeller - Unslander Monica


my favorites are

from functools import reduce
try:
  a = reduce(getattr, ("id", "number"), myobject)
except AttributeError:
  a = None

or

from operator import attrgetter
try:
  a = attrgetter('id.number')(myobject)
except AttributeError:
  a = None
like image 4
Dash Winterson Avatar answered Oct 11 '22 21:10

Dash Winterson