code: def listattrs(x):
      
      return [attr for attr in dir(x) if not attr.startswith("__") and not callable(getattr(x, attr))]
docs: Get all instance and class attributes for an object
      
      Get all instance and class attributes for an object except those that start
      with "__" (double underscore).
      
      __dict__ of an object only reports the instance attributes while dir() 
      reports all of the attributes of an object including private ones.
      
      Callable attrs are filtered out.
      
      Args:
          x (object): Some object
      
      Returns:
          list str: List of non-callable non-private attributes of object x