Verständnisproblem bei Magic methods
Verfasst: Sonntag 21. November 2010, 17:24
Hallo Liste,
bei dem folgenden Beispiel aus "Beginning Python" (Seite 186) von Magnus Lie Hetland soll nach Vorgabe bei der ersten counter-Abfrage
0 und bei der zweiten 2 herauskommen.
Bei mir kommt allerdings 3 und 5 heraus. Bei der Ausgabe eines Teststrings kann ich sehen, das die Methode __getitem__ bei jedem cl einmal und bei cl[4] + cl[2] zweimal aufgerufen wird. Somit stimmen die angezeigten Daten.
Kann mir jemand verraten, wieso das abweichende Ergebnis herauskommt. Oder ist das vielleicht nur ein Fehler im Buch? Ich nutzte Python 2.6.1
Gruß
Klaus
bei dem folgenden Beispiel aus "Beginning Python" (Seite 186) von Magnus Lie Hetland soll nach Vorgabe bei der ersten counter-Abfrage
0 und bei der zweiten 2 herauskommen.
Code: Alles auswählen
In [41]: class CounterList(list):
....: def __init__(self, *args):
....: super(CounterList, self).__init__(*args)
....: self.counter = 0
....: def __getitem__(self, index):
....: self.counter += 1
....: return super(CounterList, self).__getitem__(index)
....:
In [42]: cl = CounterList(range(10))
In [43]: cl
Out[43]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [44]: cl.reverse()
In [45]: cl
Out[45]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
In [46]: del cl[3:6]
In [47]: cl
Out[47]: [9, 8, 7, 3, 2, 1, 0]
In [48]: cl.counter
Out[48]: 3
In [49]: cl[4] + cl[2]
Out[49]: 9
In [50]: cl.counter
Out[50]: 5
Kann mir jemand verraten, wieso das abweichende Ergebnis herauskommt. Oder ist das vielleicht nur ein Fehler im Buch? Ich nutzte Python 2.6.1
Gruß
Klaus