Objekt unbekannt

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
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

Dienstag 19. April 2005, 11:58

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
greetings
sebi
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 19. April 2005, 12:28

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()

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

Dienstag 19. April 2005, 14:22

Ok, und wenn ich den Klassennamen nur als String habe?
greetings
sebi
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 19. April 2005, 14:27

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...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
XT@ngel
User
Beiträge: 256
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Dienstag 19. April 2005, 14:32

Hallo,
Das geht mit

Code: Alles auswählen

object = globals()["meineKlasseStr"]
MfG
Andreas
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 19. April 2005, 14:33

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

Dienstag 19. April 2005, 18:22

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
greetings
sebi
BlackJack

Dienstag 19. April 2005, 21:41

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')
Antworten