Seite 1 von 1

Objekt unbekannt

Verfasst: Dienstag 19. April 2005, 11:58
von antimicro
Hi,
ich hab ein Problem mit Python zudem ich keine Hilfe finde, weil ich nicht mal weiß wie sich das nennt.
Und zwar hab ich einen String mit dem Inhalt „Kiste“ und ein Modul mit einer Klasse namens „Kiste“. Gibt es eine Standardfunktion um an die Kiste zu kommen (als Objekt)?

Code: Alles auswählen

objekt.Kiste
string = "Kiste"
Dank im Voraus

Verfasst: Dienstag 19. April 2005, 12:28
von jens
Du hast ein Modul mit einer Klasse namens „Kiste“ und das modul heist Beispiel, dann mußt du es nur so importieren:

Code: Alles auswählen

import Beispiel
MeineKiste = Beispiel.Kiste()

Verfasst: Dienstag 19. April 2005, 14:22
von antimicro
Ok, und wenn ich den Klassennamen nur als String habe?

Verfasst: Dienstag 19. April 2005, 14:27
von jens
Mit dem bösen eval() geht's natürlich, ist aber unschön... Dafür müße es eigentlich irgendwas ähnliches geben wie __import__()

Um eval() etwas einzuschränken kannst du ja mit dir() nachsehen ob der String auch wirklich ein Objekt ist...

Verfasst: Dienstag 19. April 2005, 14:32
von XT@ngel
Hallo,
Das geht mit

Code: Alles auswählen

object = globals()["meineKlasseStr"]
MfG
Andreas

Verfasst: Dienstag 19. April 2005, 14:33
von Leonidas
jens hat geschrieben:Mit dem bösen eval() geht's natürlich, ist aber unschön... Dafür müße es eigentlich irgendwas ähnliches geben wie __import__()
Gibt es doch: Beispiel.__dict__['Kiste']
jens hat geschrieben:Um eval() etwas einzuschränken kannst du ja mit dir() nachsehen ob der String auch wirklich ein Objekt ist...
Öhm, das schafft nur trügerische Sicherheit. Es gibt immer Wege.

Verfasst: Dienstag 19. April 2005, 18:22
von antimicro
Danke für die schnellen Antworten,
mit

Code: Alles auswählen

object = globals()["meineKlasseStr"]
hab ich es leider nicht hinbekommen, weil sich die Funktion globals() nicht auf das Modul beziehen lässt :?: ,
aber Leonidas Post brachte die Lösung :D

Verfasst: Dienstag 19. April 2005, 21:41
von BlackJack
Etwas schöner, weil man nicht direkt auf "Magie" (spezielle Variablen mit zwei Unterstrichen vorne und hinten) zurückgreifen muss ist:

Code: Alles auswählen

kiste = getattr(objekt, 'Kiste')