Das Iterator-Protokoll
»__next__«
main.py
class C():
passc = C()
try: print( next( c ))
except Exception as e: print( e )class C():
def __next__( self ):
return "ok."
passc = C()
try: print( next( c ))
except Exception as e: print( e )- Protokoll
'C' object is not an iterator
ok.main.py
i = 0
class C():
def __iter__( self ):
return self
def __next__( self ):
global i
i += 1
if i < 3: return i
else: raise StopIteration
passc = C()
for j in c:
print( j )- Protokoll
1
2
Protokolle
an iterator is expected to define
def __iter__(self): return self
Yes? It is indeed an iterator, since its iter method returns itself. It is also iterable, since it has an iter method.
Übungsfragen
? Übungsfrage
- ? Übungsfrage
- Sagen Sie die Ausgabe des folgenden Programms voraus, ohne das Programm zu starten.
main.py
class Main:
def __init__( self ):
self.x = None
def __str__( self ):
return str( self.x )p = Main()
q = Main()
p.x = 8
q.x = 3
print( p )
print( q )
print( p )
? Ziel- und Argument
Wie heißt das Ziel (Zielobjekt) des folgenden Aufrufs?
Wie heißt das Argument des folgenden Aufrufs?
(Hierbei soll angenommen werden, daß »gamma« und »delta« Namen von Variablen sind, die Objekte enthalten.)
- Aufruf
gamma.m( delta )
? Übungsfrage
- ? Übungsfrage
- Sagen Sie die Ausgabe des folgenden Programms voraus, ohne das Programm zu starten.
main.py
class Main:
def __init__( self ):
self.x = None
def m( self, other ):
print( self.x - other.x )p = Main()
q = Main()
p.x = 9
q.x = 5
p.m( q )
q.m( p )
? Übungsfrage 1
- ? Übungsfrage
- Sagen Sie die Ausgabe des folgenden Programms voraus, ohne das Programm zu starten.
main.py
class Main:
def __init__( self ):
self.x = None
def m( self ):
print( self.x )
self.x += 1p = Main()
q = Main()
p.x = 7
q.x = 2
p.m()
q.m()
p.m()
? Übungsfrage
- ? Übungsfrage (mittelschwierig)
- Sagen Sie die Ausgabe des folgenden Programms voraus, ohne das Programm zu starten.
main.py
class Main:
def __init__( self ):
self.x = None
def a( self ):
return 14
def b( self ):
return self.x
def m( self, other ):
print( self.a() - other.b() )p = Main()
q = Main()
p.x = 5
q.x = 9
p.m( q )
q.m( p )
Übungsaufgaben
/ Übungsaufgabe
Der Start des folgende Codestücks ergibt eine Fehlermeldung
- Codestück
with c() as x:
pass
Deklarieren Sie eine Klasse c vor dem Codestück und passen Sie dann deren Deklaration so lang an, bis es keine Fehlermeldungen mehr gibt. (Diese Aufgabe sollte ohne das Lesen von Dokumentation oder anderer Informationsquellen nur durch Lesen der Fehlermeldungen gelöst werden können.)
/ Übungsaufgabe 0
Ergänzen Sie in dem untenstehenden Programm benötigte Deklarationen von Methoden und von Feldern, so daß man mit »hello()« den Text »Hallo!« ausgeben kann, wie in dem untenstehenden Programm zu sehen ist. Dabei können die beiden Ellipsen »…« durch andere Texte ersetzt werden. Das Hauptprogramm darf nicht verändert werden.
main.py
class Main:
…o = Main()
x = Main()
o.hello()
x.hello()Ausgabe
Hallo!
Hallo!
/ Übungsaufgabe 1
Ergänzen Sie in dem untenstehenden Programm benötigte Deklarationen von Methoden und von Feldern, so daß man mit »hello« eine Person begrüßen kann, wie in dem untenstehenden Programm zu sehen ist.
main.py
class Main:
…o = Main()
x = Main()
o.hello( "Mia" )
x.hello( "Ben" )Ausgabe
Hallo Mia!
Hallo Ben!
/ Übungsaufgabe 2
Ergänzen Sie in dem untenstehenden Programm benötigte Deklarationen von Methoden und von Feldern, so daß man mit einer Zuweisung an das Feld ›name‹ einen Namen für ein Objekt festlegen kann, das dann von der Funktion ›hello‹ verwendet wird, um eine entsprechende Begrüßung auszugeben, wie in dem untenstehenden Programm zu sehen ist.
main.py
class Main:
…o = Main()
x = Main()
o.name = "Pia"
x.name = "Leo"
o.hello()
x.hello()
o.name = "Zoe"
o.hello()Ausgabe
Hallo Pia!
Hallo Leo!
Hallo Zoe!
/ Übungsaufgabe 3 ⃖
Ergänzen Sie in dem untenstehenden Programm an der Stelle der Ellipse »…« benötigte Deklarationen von Methoden und von Feldern, so daß man mit »greet« eine Person begrüßen kann, wobei die Begrüßungsformel vorher mit »=« festgelegt wurde, wie in dem untenstehenden Programm zu sehen ist.
main.py
class Main:
…o = Main()
x = Main()
o.greeting = "Hallo"
x.greeting = "Guten Tag,"
o.greet( "Max" )
o.greet( "Lea" )
x.greet( "Max" )
x.greet( "Lea" )
x.greeting = "Willkommen"
o.greet( "Max" )
o.greet( "Lea" )
x.greet( "Max" )
x.greet( "Lea" )Ausgabe
Hallo Max
Hallo Lea
Guten Tag, Max
Guten Tag, Lea
Hallo Max
Hallo Lea
Willkommen Max
Willkommen Lea
/ Übungsaufgabe 4
Die Methode »count« soll das Attribut ›value‹ des Objekts um «1» erhöhen.
main.py
class Main:
…counter0 = Main()
counter1 = Main()
counter1.count(); counter1.count(); counter1.count()
counter1.count(); counter1.count()
print( counter0.value )
print( counter1.value )Ausgabe
0
5