Hi killroy84,
Bei "oldstyle" Klassen, steht die eingebaute Funktion
vars zur Verfügung, sie gibt die Attribute mit ihren Werten als Dictionary zurück
Code: Alles auswählen
class A:
def __init__(self):
self.a = 0
obj = A()
print vars(obj)
{'a': 0}
vars gibt auch die Attribute, die in einer Elternklasse definiert wurden aus.
Wenn die Klasse eine "newstyle" Klasse ist, welche mit __slots__ arbeitet, stehen die Attributnamen in der Liste __slots__
Code: Alles auswählen
class C(object):
__slots__ = ["c"]
def __init__(self):
self.c = 3
obj = C()
print obj.__slots__
['c']
mit der Funktion
getattr(obj, name) kannst Du auf die Attribute einer Klasse über den Namen als String Zugriff erhalten.
Achtung, es werden
nicht die Attribute von Elternklassen einer Klasse in __slots__ festgehalten. Um auch die Attribute die in einer Elternklasse definiert wurden auszugeben musst Du eine recursive Funktion schreiben.
Code: Alles auswählen
class C(object):
__slots__ = ["c"]
def __init__(self):
self.c = 3
class D(C):
__slots__ = ["d"]
def __init__(self):
super(D,self).__init__()
self.d = 4
def print_attrs(obj, cls=None, ind=0):
inds = "\t"*ind # Einrückung
if cls is None: cls = obj.__class__ # Klasse des Objekts
print "%sAttribute von Klasse %s:" % (inds, cls.__name__)
if hasattr(cls, "__slots__"):
for attr in cls.__slots__:
print "%s %s =" % (inds, attr), getattr(obj, attr)
else:
print "%s (keine Attriubte definiert)" % (inds,)
for parent in cls.__bases__:
print_attrs(obj, parent, ind+1)
test = D()
print_attrs(test)
Gruß
Dookie