def get_card(self, index=-1, cache=True, remove=True):
        """
        Retrieve a card any number of cards from the top. Returns a
        ``Card`` object loaded from a library if one is specified otherwise
        just it will simply return its code.

        If `index` is not set then the top  card will be retrieved.

        If cache is set to True (the default) it will tell the library to cache
        the returned card for faster look-ups in the future.

        If remove is true then the card will be removed from the deck before
        returning it.
        """
        if len(self.cards) < index:
            return None

        retriever = self.cards.pop if remove else self.cards.__getitem__
        code = retriever(index)

        if self.library:
            return self.library.load_card(code, cache)
        else:
            return code
Retrieve a card any number of cards from the top. Returns a
        ``Card`` object loaded from a library if one is specified otherwise
        just it will simply return its code.

        If `index` is not set then the top  card will be retrieved.

        If cache is set to True (the default) it will tell the library to cache
        the returned card for faster look-ups in the future.

        If remove is true then the card will be removed from the deck before
        returning it.