""" implement Container
"""


class EmptyContainerException(Exception):
    """
    Exceptions called when empty Container used inappropriately
    """
    pass


class Container:
    """ Container with add, remove, and is_empty methods.

    This is an abstract class that is not meant to be instantiated itself,
    but rather subclasses are to be instantiated.
    """

    def __init__(self):
        """
        Create a new Container self.

        @param Container self: this Container
        @rtype: None
        """
        self._contents = None
        raise NotImplementedError("Override this!")

    def add(self, obj):
        """
        Add obj to Container self.

        @param Container self: this Container
        @param object obj: object to add to self
        @rtype: None
        """
        raise NotImplementedError("Override this!")

    def remove(self):
        """
        Remove and return an object from Container self.

        Assume that Container self is empty.

        @param Container self: this Container.
        @rtype: object
        """
        raise NotImplementedError("Override this!")

    def is_empty(self):
        """
        Return whether Container self is empty.

        @param Container self: this Container
        @rtype: bool
        """
        raise NotImplementedError("Override this!")
