Я унаследовал проект со многими большими классами, составляющими только объекты класса (целые числа, строки и т.д.). Я хотел бы иметь возможность проверить, присутствует ли атрибут без необходимости вручную определять список атрибутов.
Можно ли сделать сам класс python итерабельным, используя стандартный синтаксис? То есть, я хотел бы иметь возможность перебирать все атрибуты класса с помощью for attr in Foo:
(или даже if attr in 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 "<stdin>", line 1, in <module> TypeError: 'classobj' object is not iterable
Тем не менее, это работает:
>>> for x in Foo.__iter__(): ... print(x) bar baz