class Stack:
    """
    A stack of items that can be accessed from the top.
    
    operations:
       push: add an item to the top of the stack
       pop: remove and return the top item from the stack
       is_empty: True iff the stack is empty
       top: return value of top item without removing it.
    """
    
    def __init__(self: 'Stack') -> None:
        """
        Set up an empty stack
        >>> s = Stack()
        >>> isinstance(s, Stack)
        """
        self._data = []
        
    def push(self: 'Stack', item: object) -> None:
        """
        Add item to the top of the stack.
        
        >>> s = Stack()
        >>> s.push(3)
        >>> s.pop()
        3
        """
        
        self._data.append(item)
        
    def pop(self: 'Stack') -> object:
        """
        Remove and return the top item from self.
        
        >>> s = Stack()
        >>> s.push(3)
        >>> s.pop()
        3
        """
        
        return self._data.pop()
    
    def is_empty(self: 'Stack') -> bool:
        """
        Return True iff self is empty.
        
        >>> s = Stack()
        >>> s.is_empty()
        True
        """
        
        return len(self._data) == 0
    
        
        