Eine denkbare Implementation sieht so aus:

class Stack:
  def __init__(self):
    self.elements = []

  def __len__(self):
    return len(elements)

  def push(self, element):
    self.elements.append(element)

  def pop(self):
    return self.elements.pop(element)

  def peek(self):
    return self.elements[-1]

Besonders schlaue Menschen könnten versucht sein, sich durch Erben von list das Leben einfacher zu machen:

class CheatStack(list):
  def push(self, element):
    self.append(element)

  def peek(self):
    return self.elements[-1]

Dies täte zwar alles, was wir wollen, aber leider noch viel mehr (es erlaubt nämlich alle Zugriffe auf den “Stack”, die wir auch auf Listen machen können). Wirklich schlimm ist das nicht, solange alle NutzerInnen der Klasse wissen, was sie tun. Häufig schadet es aber nicht, Operationen, die nicht gehen sollen, gar nicht erst anzubieten. Die erste Klasse tut dies ohnehin, bei CheatStack könnten wir alle Methoden, die wir verbieten wollen, überschreiben (und dann Exceptions auslösen) oder gleich aus dem Objekt löschen (del self.append geht in der Tat).