Generic overlap implementation.

    Arguments:
      item (:py:class:`collections.abc.Sequence`): The objects to
        find overlaps for.
      overlap_attr (:py:class:`str`): The attribute of the items to use
        as input for the overlap.
      client (:py:class:`~.TMDbClient`, optional): The TMDb client
        to extract additional information about the overlap.
      get_method (:py:class:`str`, optional): The method of the
        client to use for extracting additional information.

    Returns:
      :py:class:`list`: The relevant result objects.

async def _overlap(items, overlap_attr, client=None, get_method=None):
    """Generic overlap implementation.

    Arguments:
      item (:py:class:`collections.abc.Sequence`): The objects to
        find overlaps for.
      overlap_attr (:py:class:`str`): The attribute of the items to use
        as input for the overlap.
      client (:py:class:`~.TMDbClient`, optional): The TMDb client
        to extract additional information about the overlap.
      get_method (:py:class:`str`, optional): The method of the
        client to use for extracting additional information.

    Returns:
      :py:class:`list`: The relevant result objects.

    """
    overlap = set.intersection(*(getattr(item, overlap_attr) for item in items))
    if client is None or get_method is None:
        return overlap
    results = []
    for item in overlap:
        result = await getattr(client, get_method)(id_=item.id_)
        results.append(result)
    return results