def test_deepgetattr(self): class a: l = [] self.assertTrue(deepgetattr(a, 'l.__len__.__call__'), a.l.__len__.__call__) self.assertTrue(deepgetattr(a, 'l.__nx__.__x__', 42), 42) self.assertRaises(AttributeError, lambda: deepgetattr(a, 'l.__nx__.__x__'))
def getdeepattr(obj, attr, *arg, **kwarg): if isinstance(obj, dict): return obj.get(attr) return deepgetattr(obj, attr, *arg, **kwarg)