code: def recursive_setattr(obj: Any, attr: str, val: Any) -> Any:
      
      pre, _, post = attr.rpartition('.')
      return setattr(recursive_getattr(obj, pre) if pre else obj, post, val)
docs: Recusrive ``setattr``.
  
      This can be used as a drop in for the standard ``setattr(...)``. Credit to:
      https://stackoverflow.com/a/31174427
  
      Args:
          obj: Object to retrieve the attribute from.
          attr: Name of the attribute, with each successive attribute separated by a ".".
          value: Value to set the attribute to.
      Returns:
          The requested attribute. (Same as ``getattr``).
      Raises:
          AttributeError: If the attribute was not found and no default was provided. (Same as ``getattr``).