just for fun: make a class (not its instances) iterable

Tim Chase python.list at tim.thechases.com
Wed Aug 10 02:29:30 CEST 2011

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):
       # ...

   a = MyClass(...)
   b = MyClass(...)
   for instance in MyClass:

I was curious/surprised to find that

   class MyClass:
     instances = []
     def __iter__(cls):
       for i in cls.instances:
         yield i
     def __init__(self):

didn't work as I expected since MyClass then has an __iter__ 
property that should know about the class.


More information about the Python-list mailing list