Python: Сделать класс итерируемым

Я унаследовал проект со многими большими классами, состоящими только из объектов класса (целых чисел, строк и т. Д.). Я хотел бы иметь возможность проверять наличие атрибута без необходимости определять список атрибутов вручную.

Можно ли сделать сам итеративный класс python , используя стандартный синтаксис? То есть я хотел бы иметь возможность перебирать все атрибуты класса, используя для 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] != "__"])

Однако это не совсем то, что я ' ... печать (x) Отслеживание (последний вызов последний): Файл "", строка 1, в TypeError: объект classobj не повторяется

Тем не менее, это работает:

 >>> for x in Foo .__ iter __ ():
... печать (x)
бар
баз
37
задан Acumenus 2 October 2018 в 00:23
поделиться