Python: Machen Klasse iterierbar

Ich habe geerbt ein Projekt mit vielen großen Klassen Bestandteil von nichts aber die class-Objekte (zahlen, strings, etc.). Ich möchte in der Lage sein zu überprüfen, ob ein Attribut vorhanden, ohne benötigt zu definieren, der eine Liste der Attribute manuell.

Ist es möglich, ein python - Klasse wiederholenden, sich selbst mit der standard-syntax? Das heißt, ich möchte in der Lage sein zu iterieren über alle einer Klasse werden die Attribute mit for attr in Foo: (oder sogar if attr in Foo), ohne erstellen Sie eine Instanz der ersten Klasse. Ich denke, ich kann dies tun, indem Sie die Definition __iter__, aber bisher habe ich noch nicht ganz geschafft, was ich Suche.

Habe ich erreicht, was ich will, durch hinzufügen eines __iter__ Methode etwa so:

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

Aber diese nicht ganz erreichen, was ich Suche:

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

Sogar so, das funktioniert:

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

InformationsquelleAutor multipleinterfaces | 2011-03-25

Schreibe einen Kommentar