Iteration's support for __getitem__
can be seen as a "legacy feature" which allowed smoother transition when PEP234 introduced iterability as a primary concept. It only applies to classes without __iter__
whose __getitem__
accepts integers 0, 1, &c, and raises IndexError
once the index gets too high (if ever), typically "sequence" classes coded before __iter__
appeared (though nothing stops you from coding new classes this way too).
Personally, I would rather not rely on this in new code, though it's not deprecated nor is it going away (works fine in Python 3 too), so this is just a matter of style and taste ("explicit is better than implicit" so I'd rather explicitly support iterability rather than rely on __getitem__
supporting it implicitly for me -- but, not a bigge).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…