Python: Faire de la classe objet iterable

J'ai hérité d'un projet avec de nombreuses grandes classes de constituants de rien, mais les objets de la classe (entiers, chaînes de caractères, etc). Je voudrais être en mesure de vérifier si un attribut est présent, sans le besoin de définir une liste d'attributs manuellement.

Est-il possible de faire un python classe itérable lui-même en utilisant la syntaxe standard? C'est, je voudrais être en mesure de parcourir toutes d'une classe d'attributs à l'aide for attr in Foo: (ou même if attr in Foo) sans avoir besoin de créer une instance de la classe de première. Je pense que je peux le faire en définissant __iter__, mais jusqu'à présent, je n'ai pas vraiment réussi ce que je suis à la recherche d'.

J'ai réalisé certains de ce que je veux en ajoutant un __iter__ méthode comme suit:

class Foo:
    bar = "bar"
    baz = 1
    @staticmethod
    def __iter__():
        return iter([attr for attr in dir(Foo) if attr[:2] != "__"])

Cependant, ce n'est pas tout à fait accomplir ce que je suis à la recherche de:

>>> for x in Foo:
...     print(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'classobj' object is not iterable

Même si, cela fonctionne:

>>> for x in Foo.__iter__():
...     print(x)
bar
baz

OriginalL'auteur multipleinterfaces | 2011-03-25