On 8/9/2011 8:29 PM, Tim Chase wrote:
On 08/09/2011 07:11 PM, Terry Reedy wrote:
On 8/9/2011 5:43 PM, Gelonida N wrote:
Now I wondered whether there is any way to implement a class such, that
I can write
for val in MyClass:
print val
And what are the items in a class that you expect that to produce?
I can see doing something like
class MyClass:
instances = []
def __init__(self, *args, **kwargs):
self.instances.append(self)
# ...
a = MyClass(...)
b = MyClass(...)
for instance in MyClass:
for instance in MyClass.instances:
do_something(instance)
I was curious/surprised to find that
class MyClass:
instances = []
@classmethod
def __iter__(cls):
for i in cls.instances:
yield i
def __init__(self):
self.instances.append(self)
didn't work as I expected since MyClass then has an __iter__ property
that should know about the class.
I strongly suspect that iter(ob) starts the lookup for __iter__ with
type(ob). I would also expect
for instance in MyClass.__iter__()
to work, but that is a waste since instances is already iterable.
--
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list