class Stack(object):
    """A simple class representing the Stack ADT
    
    Public methods:
    __init__(self) 
    push(self, o)
    pop(self)
    peek(self)
    is_empty(self)
    size()
    
    Public attributes:
    """
    
    # this is the constructor for the Stack class
    def __init__(self):
        """Create a new, empty Stack object."""
        self.items = []
    
    def push(self, o):
        """Add Object o to the top of the Stack"""
        self.items.append(o)
        
    def pop(self):
        """Return and remove the Object at the top of the Stack, if empty return None"""
        if self.size() > 0:
            return self.items.pop()
        else:
            return None
    
    def peek(self):
        """Return the Object at the top of the Stack"""
        return self.items[-1]
    
    def is_empty(self):
        return self.items == []
    
    def size(self):
        return len(self.items)

class MyAwesomeStack(Stack):
    """An even more awesome stack"""

    def shoot_lasers(self):
        """Python has no lasers module, so we'll have to make do"""
        print("PEW!!! PEW!!!!111one!!!")

    def __str__(self):
        return 'AWESOME: ' + str(self.items)

