Wie erhält man eine Liste aller Variablen in einer Klasse, die iterierbar ist? Ein bisschen wie Einheimische (), aber für eine Klasse
class Example(object):
bool143 = True
bool2 = True
blah = False
foo = True
foobar2000 = False
def as_list(self)
ret = []
for field in XXX:
if getattr(self, field):
ret.append(field)
return ",".join(ret)
dies sollte zurückkehren
>>> e = Example()
>>> e.as_list()
bool143, bool2, foo
for field in [ self.bool143, self.bool2, self.blah, self.foo, self.foobar2000 ]
? Wie kommt es, dass Sie die Instanzvariablen der Klasse nicht kennen?Antworten:
gibt Ihnen alle Attribute des Objekts. Sie müssen die Mitglieder selbst aus Methoden usw. herausfiltern:
Werde dir geben:
quelle
callable(attr)
? Ist das keinattr
String?vars(Example).items()
odervars(instance.__class__).items()
stattdessen,dir()
ob Sie überprüfen möchten, ob es aufrufbar ist oder nicht, da dir nurstring
als NamenWenn Sie nur die Variablen (ohne Funktionen) möchten, verwenden Sie:
quelle
vars
enthält nicht die Klassenvariablen, sondern nur die Instanzvariablen.members = list(vars(example).keys())
as (zumindest in python3)vars
gibt einedict
Zuordnung des Namens der Mitgliedsvariablen zu ihrem Wert zurück.@truppo: Ihre Antwort ist fast korrekt, aber callable gibt immer false zurück, da Sie nur eine Zeichenfolge übergeben. Sie benötigen etwa Folgendes:
das wird Funktionen herausfiltern
quelle
- Wie Sie sehen, erhalten Sie alle Attribute, sodass Sie ein wenig herausfiltern müssen. Aber im Grunde
dir()
ist es das , wonach Sie suchen.quelle
Benutze das.
quelle
quelle
Der einfache Weg, dies zu tun, besteht darin, alle Instanzen der Klasse in a zu speichern
list
.Objekte entstehen nicht spontan. Ein Teil Ihres Programms hat sie aus einem bestimmten Grund erstellt. Die Erstellung erfolgt aus einem bestimmten Grund. Das Sammeln in einer Liste kann auch aus einem bestimmten Grund erfolgen.
Wenn Sie eine Fabrik verwenden, können Sie dies tun.
quelle