dir() 'rekursiv' aufrufen

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
mirkosoft
User
Beiträge: 3
Registriert: Donnerstag 19. Juli 2007, 12:25

Donnerstag 19. Juli 2007, 12:29

Hallo

weiss jemand, ob es möglich ist, dir() so aufzurufen, dass auf den Ergebnissen aus dir() jeweils wieder ein dir() aufgerufen wird?

Dafür wäre es nötig, dass ein Objekt über seinen Namen (als String) angesprochen werden kann, so im Sinne von Class.forName("Name") in Java.

Also etwa so in der Art:

Code: Alles auswählen

def dirRecursive(obj):
	list = dir(obj)
	for item in list:
		## etwas mit item machen...
		dirRecursive(item) ##das geht natürlich nicht!
Danke für einen Hinweis!
Zuletzt geändert von mirkosoft am Donnerstag 19. Juli 2007, 12:48, insgesamt 3-mal geändert.
BlackJack

Donnerstag 19. Juli 2007, 12:45

Das müsstest Du schon, wie angedeutet, selbst programmieren. Allerdings solltest Du Dir Gedanken um eine Abbruchbedingung machen, weil es sonst läuft bis die maximale Rekursionstiefe erreicht ist und dann mit einer Ausnahme abbricht.
mirkosoft
User
Beiträge: 3
Registriert: Donnerstag 19. Juli 2007, 12:25

Donnerstag 19. Juli 2007, 12:52

Der Beitrag ist mir versehentlich raus, bevor er ganz fertig war... Die Antworten kommen ja blitzschnell in diesem Forum!

@BlackJack:

Das Ergebnis von dir() ist ja eine Liste von Strings. Wie kann ich diese nun als 'Objekte' an dir() weitergeben? Ansonsten wird dir() ja immer auf dem Objekt String ausgeführt...

Das mit der Abbruchbedingung ist natürlich eine gute Überlegung :!:
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 19. Juli 2007, 13:11

mirkosoft hat geschrieben:Das Ergebnis von dir() ist ja eine Liste von Strings. Wie kann ich diese nun als 'Objekte' an dir() weitergeben?
Hallo mirkosoft!

Willkommen im Python-Forum!

Code: Alles auswählen

>>> for attrname in dir(os):
...     try:
...         print "%s:" % attrname
...         print dir(getattr(os, attrname))
...     except AttributeError:
...         pass
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mirkosoft
User
Beiträge: 3
Registriert: Donnerstag 19. Juli 2007, 12:25

Donnerstag 19. Juli 2007, 13:38

Hallo gerold,

danke für die freundliche Begrüssung im Forum und den Tipp mit getattr() - habe ich nicht gekannt! Damit werde ich schon mal etwas weiter kommen.
BlackJack

Donnerstag 19. Juli 2007, 15:53

Das `inspect`-Modul ist vielleicht auch interessant für Dich.
Antworten