Можно ли создать класс Python можно итерировать, используя стандартный синтаксис? То есть я хотел бы иметь возможность перебирать все атрибуты класса, используя for attr в Foo: (или даже если attr в Foo), без необходимости сначала создавать экземпляр класса. . Я думаю, что могу сделать это, определив __iter__, но пока мне не удалось добиться того, что я ищу.
Я кое-что добился того, что я хочу, добавив метод __iter__ следующим образом:
Код: Выделить всё
class Foo:
bar = "bar"
baz = 1
@staticmethod
def __iter__():
return iter([attr for attr in dir(Foo) if attr[:2] != "__"])
Код: Выделить всё
>>> for x in Foo:
... print(x)
Traceback (most recent call last):
File "", line 1, in
TypeError: 'classobj' object is not iterable
Даже в этом случае это работает:
Код: Выделить всё
>>> for x in Foo.__iter__():
... print(x)
bar
baz
Подробнее здесь: https://stackoverflow.com/questions/543 ... s-iterable
Мобильная версия