Skip to content
Advertisement

Python: Make class iterable

I have inherited a project with many large classes constituent of nothing but class objects (integers, strings, etc). I’d like to be able to check if an attribute is present without needed to define a list of attributes manually.

Is it possible to make a python class iterable itself using the standard syntax? That is, I’d like to be able to iterate over all of a class’s attributes using for attr in Foo: (or even if attr in Foo) without needing to create an instance of the class first. I think I can do this by defining __iter__, but so far I haven’t quite managed what I’m looking for.

I’ve achieved some of what I want by adding an __iter__ method like so:

JavaScript

However, this does not quite accomplish what I’m looking for:

JavaScript

Even so, this works:

JavaScript

Advertisement

Answer

Add the __iter__ to the metaclass instead of the class itself (assuming Python 2.x):

JavaScript

For Python 3.x, use

JavaScript
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement