burim:python:python-labs:loesung_blatt10_aufgabe1_fifo_klasse_kommentiert.py
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()
burim/python/python-labs/loesung_blatt10_aufgabe1_fifo_klasse_kommentiert.py.txt · Last modified: 2019/01/21 20:55 by 127.0.0.1
