Python: сделать класс итеративнымPython

Программы на Python
Ответить
Anonymous
 Python: сделать класс итеративным

Сообщение Anonymous »

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

Можно ли создать класс 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»