2014-01-25 00:17:36 +00:00
|
|
|
# create a class that has a __getitem__ method
|
|
|
|
class A:
|
|
|
|
def __getitem__(self, index):
|
|
|
|
print('getitem', index)
|
|
|
|
if index > 10:
|
|
|
|
raise StopIteration
|
|
|
|
|
|
|
|
# test __getitem__
|
|
|
|
A()[0]
|
|
|
|
A()[1]
|
|
|
|
|
|
|
|
# iterate using a for loop
|
|
|
|
for i in A():
|
|
|
|
pass
|
|
|
|
|
|
|
|
# iterate manually
|
|
|
|
it = iter(A())
|
|
|
|
try:
|
|
|
|
while True:
|
|
|
|
next(it)
|
|
|
|
except StopIteration:
|
|
|
|
pass
|
2015-04-05 00:03:43 +01:00
|
|
|
|
2015-08-30 11:48:06 +01:00
|
|
|
# this class raises an IndexError to stop the iteration
|
|
|
|
class A:
|
|
|
|
def __getitem__(self, i):
|
|
|
|
raise IndexError
|
|
|
|
print(list(A()))
|
|
|
|
|
2015-04-05 00:03:43 +01:00
|
|
|
# this class raises a non-StopIteration exception on iteration
|
|
|
|
class A:
|
|
|
|
def __getitem__(self, i):
|
|
|
|
raise TypeError
|
|
|
|
try:
|
|
|
|
for i in A():
|
|
|
|
pass
|
|
|
|
except TypeError:
|
|
|
|
print("TypeError")
|