import functools def recurse_getattr(obj, attr: str): """ Recursive `getattr`. Args: obj: A class instance holding the attribute. attr (`str`): The attribute that is to be retrieved, e.g. 'attribute1.attribute2'. """ def _getattr(obj, attr): return getattr(obj, attr) return functools.reduce(_getattr, [obj] + attr.split(".")) def recurse_setattr(module, name, value): """A function to recursively set attributes to a module.""" if "." not in name: setattr(module, name, value) else: name, rest = name.split(".", 1) recurse_setattr(getattr(module, name), rest, value)