class MyFifo(): # Definition der Klasse 'MyFifo' """ Demo für eine FIFO Struktur, nicht zur produktiven Anwendung konzipiert! """ def __init__(self, content=[]): # Kontruktor enthaelt neben dem Schluessel- # wort 'self', welcher auf das Objekt # selbst verweist, den Inhalt (per Default # als leere Liste) if isinstance(content, (tuple, list, str)): # verweist das Eingabe- # argument 'content' auf # etwas vom Typ Tuple, # Liste oder String self.content = [i for i in content] # dann wird dieses Elementweise # in das Klassenattribut # 'content' einsortiert. # Die List-Comprehension # liefert eine Liste. else: # ansonsten self.content = [] # verweist das Klassenattribut 'content' auf eine # leere Liste. def __repr__(self): # Ueberschreiben der __repr__()-Funktion zum return str(self.content) # Spezifizieren einer selbstgewaehlten # Darstellung. def __add__(self, fifo): # Spezifizieren der Verknuefung zweier Objekte vom # Typ 'MyFifo'. return MyFifo(self.content[:] + fifo.content[:]) # Nutzung der bereits # definierten Ver- # knuepfung von # Listen, Tuple und # Strings. def put_in(self, item): # Klassenmethode fuer das Hinzufuegen von # Elementen. Fuegt das mit 'item' uebergebene # Element hinzu self.content.append(item) # und nutzt hierfuer die append()-Funktion. def take_out(self): # Klassenmethode zum Entfernen des ersten Elementes. if len(self.content) > 0: # wenn die Liste nicht bereits leer ist return self.content.pop(0) # entferne das erste Element mit pop(0) def interactive(self): # Klassenmethode zum Starten des interaktiven Modus while True: # Endlosschleife k = input("> ") # Eingabe des Nutzers if k == "": # wenn es sich bei der Eingabe um eine leere # Zeichenfolge handelt (also Enter) break # wird die Schleife mit 'break' abgebrochen. if k != "?": # wenn es sich bei der Eingabe um kein '?' handelte self.put_in(k) # wird die Klassenmethode put_in(k) aufgerufen print(self.__repr__()) # Aufruf der Darstellung von MyFifo else: # ansonsten out = self.take_out() # wird das erste Element entfernt if out: # wenn ein Element entfernt wurde print(out) # wird dieses ausgegeben else: # ansonsten print('The Queue is empty.') # ist die Queue leer def main(): # Hauptmethode main() zum Testen print('Selftest for Class MyFifo:') f0 = MyFifo(1) print(f0) # f1 = MyFifo((1, 2, 3)) # f1 = MyFifo('123') f1 = MyFifo([1, 2, 3]) f2 = MyFifo((3, 4, 5)) print(f1, f2) f3 = f1 + f2 print(f3) print(f3.take_out()) print(f1, f2, f3) f3.interactive() if __name__ == '__main__': main() # Aufruf der Hauptmethode main()