From 1fea5c4472b29fff85ae40a8d7f0c845347ad5c6 Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Tue, 30 Nov 2010 01:18:17 +0000 Subject: Merged revisions 86857 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r86857 | raymond.hettinger | 2010-11-28 22:56:12 -0500 (Sun, 28 Nov 2010) | 1 line Issue #10565: Iterator ABC should require both __next__ and __iter__. ........ --- Lib/_abcoll.py | 2 +- Lib/test/test_collections.py | 15 +++++++++++++-- Misc/NEWS | 3 +++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Lib/_abcoll.py b/Lib/_abcoll.py index 73e668c..e7376e4 100644 --- a/Lib/_abcoll.py +++ b/Lib/_abcoll.py @@ -82,7 +82,7 @@ class Iterator(Iterable): @classmethod def __subclasshook__(cls, C): if cls is Iterator: - if _hasattr(C, "next"): + if _hasattr(C, "next") and _hasattr(C, "__iter__"): return True return NotImplemented diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index 94305ab..2d2319f 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -355,8 +355,19 @@ class TestOneTrickPonyABCs(ABCTestCase): for x in samples: self.assertIsInstance(x, Iterator) self.assertTrue(issubclass(type(x), Iterator), repr(type(x))) - self.validate_abstract_methods(Iterator, 'next') - self.validate_isinstance(Iterator, 'next') + self.validate_abstract_methods(Iterator, 'next', '__iter__') + + # Issue 10565 + class NextOnly: + def __next__(self): + yield 1 + raise StopIteration + self.assertNotIsInstance(NextOnly(), Iterator) + class NextOnlyNew(object): + def __next__(self): + yield 1 + raise StopIteration + self.assertNotIsInstance(NextOnlyNew(), Iterator) def test_Sized(self): non_samples = [None, 42, 3.14, 1j, diff --git a/Misc/NEWS b/Misc/NEWS index 7bac7f4..47ddc7f 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -22,6 +22,9 @@ What's New in Python 2.7.1? Library ------- +- Issue #10565: The collections.Iterator ABC now checks for both + ``__iter__`` and ``next``. + - Issue #10092: Properly reset locale in calendar.Locale*Calendar classes. - Issue #10459: Update CJK character names to Unicode 5.2. -- cgit v0.12