code: def iter_superclasses(class_):
      
      ensure_class(class_)
  
      classes = set()
  
      def ascend(class_):
          superclasses = set(class_.__bases__) - classes
          classes.update(superclasses)
          return superclasses
  
      result = breadth_first(class_, ascend)
      next(result)  # omit ``class_`` itself
      return result
docs: Iterate over all the superclasses (and superclasses thereof, etc.)
      of given class.
  
      :param class_: Class to yield the superclasses of
      :return: Iterable of superclasses, super-superclasses, etc. of ``class_``
  
      .. note::
  
          In most cases, the result of :func:`iter_superclasses` is the same as
          ``class_.__mro__``, except when the method resolution order
          has been customized by the metaclass of ``class_``.