Я унаследовал проект со многими большими классами, состоящими только из объектов класса (целых чисел, строк и т. Д.). Я хотел бы иметь возможность проверять наличие атрибута без необходимости определять список атрибутов вручную.
Можно ли сделать сам итеративный класс 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)
Отслеживание (последний вызов последний):
Файл " Тем не менее, это работает:
>>> for x in Foo .__ iter __ ():
... печать (x)
бар
баз