[Raymond] >> My thought here is that iterators should always be a separate object -- >> there is no good reason for dir(iter(myfile)) to expose methods that have >> nothing to do with iteration. In the case of files, it would not be hard to >> have a singleton file-iterator object.
[GvR] >The question isn't how hard it would be, but whether it would be the >right thing to do. For iterators where (by nature of the object being >iterated over) there's only one iterator possible, I think returning >self is the right thing to do, as it makes it abundantly clear that >multiple parallel iterations are unsupported. I don't follow how returning self makes anything clear -- the only way to know that self was returned is to check object ids or to guess why dir() on the iterator returns all of the file methods: >>> f = open('tmp.txt') >>> it1 = iter(f) >>> it2 = iter(f) >>> map(id, [f, it1, it2]) # only this check shows that 'iter(f) is f' [3083536096L, 3083536096L, 3083536096L] >>> dir(it1) ['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'close', 'closed', 'encoding', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines'] ISTM, we might as well make the singletonness explicit and hide the file methods from the iterator object (nothing good can come from conflating file ops with iteration). Raymond _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com