Alle Variablen einer Klasse ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
würmchen
User
Beiträge: 255
Registriert: Mittwoch 7. November 2007, 14:17

Hallo Leute,
gibt es irgendwie einen Hack oder einen Trick, wie ich alle definierten Variablen in einer Klasse ausgeben kann? Sind die vielleicht in einem Dictionary oder so gespeichert? Also mich würden alle self.varname interessieren...

Hintergrund ist, das ich zum debuggen gerne alle Variablen ausgeben würde und nicht jedes mal, wenn ich an der Klasse etwas ändere auch meine debugmethode anpassen muss...

Vielleicht hat da jemand eine Idee...
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

würmchen hat geschrieben:Hallo Leute,
gibt es irgendwie einen Hack oder einen Trick, wie ich alle definierten Variablen in einer Klasse ausgeben kann? Sind die vielleicht in einem Dictionary oder so gespeichert?
Gut vermutet.

__dict__ ist dein Freund.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wobei man damit anscheinend keine Klassenattribute bekommt, wenn man sich auf das Objekt beschränkt.

Code: Alles auswählen

In [1]: class Foo(object):
   ...:     bar = "test"
   ...:     def __init__(self):
   ...:         self.foo = 42

In [26]: f.__dict__
Out[26]: {'foo': 42}

In [32]: Foo.__dict__.keys()
Out[32]: ['__module__', 'bar', '__dict__', '__weakref__', '__doc__', '__init__']

In [27]: f.__getattribute__("foo")
Out[27]: 42

In [28]: f.__getattribute__("bar")
Out[28]: 'test'
Man müßte dann also sowohl das Dict der Klasse als auch des Objektes abfragen und mit __getattribute__ den jeweiligen Wert holen (ggf. könnte man anhand der "__" die eigenen Klassenattribute herausfiltern).

Ich bin mir aber sicher, dass es dazu hier schon nen Thread gab ;-)
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Was ist mit dir?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

jbs hat geschrieben:Was ist mit dir?
Büdde?
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Code: Alles auswählen

In [1]: class C(object):
   ...:     var = None
   ...:     def __init__(self):
   ...:         self.x = 42
   ...:
   ...:

In [2]: dir(C())
Out[2]:
['__class__',
 '__delattr__',
 '__dict__',
 '__doc__',
 '__format__',
 '__getattribute__',
 '__hash__',
 '__init__',
 '__module__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__',
 'var',
 'x']
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
würmchen
User
Beiträge: 255
Registriert: Mittwoch 7. November 2007, 14:17

Danke Leutz, das hilft mir sehr...
Antworten