Как вы знаете, реализация метода __getitem__
делает класс итерабельным:
class IterableDemo:
def __getitem__(self, index):
if index > 3:
raise IndexError
return index
demo = IterableDemo()
print(demo[2]) # 2
print(list(demo)) # [0, 1, 2, 3]
print(hasattr(demo, '__iter__')) # False
Однако это не относится к объектам совпадения регулярных выражений:
>>> import re
>>> match = re.match('(ab)c', 'abc')
>>> match[0]
'abc'
>>> match[1]
'ab'
>>> list(match)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '_sre.SRE_Match' object is not iterable
Стоит отметить, что это исключение не __iter__
методе __iter__
, потому что этот метод даже не реализован:
>>> hasattr(match, '__iter__')
False
Итак, как можно реализовать __getitem__
не делая класс итерабельным?