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

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

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

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Hallo,
Das geht mit

Code: Alles auswählen

object = globals()["meineKlasseStr"]
MfG
Andreas
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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

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

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