Seite 1 von 1
Alle Variablen einer Klasse ausgeben
Verfasst: Dienstag 9. Februar 2010, 10:54
von würmchen
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...
Re: Alle Variablen einer Klasse ausgeben
Verfasst: Dienstag 9. Februar 2010, 11:08
von /me
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.
Verfasst: Dienstag 9. Februar 2010, 11:16
von Hyperion
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

Verfasst: Dienstag 9. Februar 2010, 11:45
von jbs
Was ist mit dir?
Verfasst: Dienstag 9. Februar 2010, 11:59
von Hyperion
jbs hat geschrieben:Was ist mit dir?
Büdde?
Verfasst: Dienstag 9. Februar 2010, 12:04
von jbs
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']
Verfasst: Dienstag 9. Februar 2010, 12:51
von würmchen
Danke Leutz, das hilft mir sehr...