Seite 1 von 1
Funktion zur automatischen Objektinitaliserung
Verfasst: Freitag 7. Oktober 2011, 10:01
von 1st.try
Hallo zusammen!
Bei der Arbeit an meinem aktuellen Projekt bin ich auf folgendes Problem gestoßen, wäre cool wenn ihr mir dabei helfen könnt:
Ziel ist es ein Objekt mit variablen im Namen mit Hilfe einer Funktion zu erstellen.
Der Code sieht dazu folgendermaßen aus:
Code: Alles auswählen
#Definition der Klasse
class BasisFunction(object):
def __init__(self, i, k):
....
vars()['N_'+str(i)+'_'+str(k)] = BasisFunction(i,k)
# Funktion soll Objekt mit Namen N_i_k erzeugen
def CreateBasisFunction(i,k):
vars()['N_'+str(i)+'_'+str(k)] = BasisFunction(i,k)
...
# folgender Aufruf sollte dann z.B. das Objekt N_5_5 erzeugen
CreateBasisFunction(5,5)
Leider wird kein Objekt erstellt. Wenn ich den Befehl aus CreateBasisFunction in der main() Prozedur eingebe, also:
Code: Alles auswählen
i = 5
k = 5
vars()['N_'+str(i)+'_'+str(k)] = BasisFunction(i,k)
funktioniert das aber... Woran liegt das ? Wie kann ich den Fehler beheben/umgehen ?
Wäre super wenn mir jemand weiterhelfen könnte.
Schon mal vielen Dank!
Re: Funktion zur automatischen Objektinitaliserung
Verfasst: Freitag 7. Oktober 2011, 10:04
von Defnull
Wenn du durchnummerierte Variablen verwendest, machst du etwas grundlegendes falsch. Was willst du denn eigentlich tun?
Re: Funktion zur automatischen Objektinitaliserung
Verfasst: Freitag 7. Oktober 2011, 10:07
von 1st.try
Hi!
erstmal danke für die schnelle Antwort!
Ich möchte Objekte erzeugen deren Namen die beiden Indizes i und k enthalten.
Re: Funktion zur automatischen Objektinitaliserung
Verfasst: Freitag 7. Oktober 2011, 10:18
von Defnull
1st.try hat geschrieben:
Ich möchte Objekte erzeugen deren Namen die beiden Indizes i und k enthalten.
Geh noch mal eine Ebene höher. WARUM willst du Objekte erzeugen deren Namen die beiden Indizes i und k enthalten?
Kleiner Denkanstoß: Macht es nicht mehr Sinn, die Objekte in einer geeigneten Datenstruktur zu halten? z.B. einem dictionary?
Code: Alles auswählen
objects = {}
objects[1, 5] = SomeClass(1, 5)
def new_object(i, k):
objects[i, k] = SomeClass(i, k)
Re: Funktion zur automatischen Objektinitaliserung
Verfasst: Freitag 7. Oktober 2011, 10:26
von 1st.try
Ah! Das ist schon mal ein guter Punkt.
Eigentlich sind mir die Namen egal. Ich möchte Quasi eine i x k Matrix mit hinterlegten Wertetabellen.
Also eher ein Objekt N(i,k) in dem Ich Werte setzten und auslesen kann...
Re: Funktion zur automatischen Objektinitaliserung
Verfasst: Freitag 7. Oktober 2011, 10:27
von Defnull
1st.try hat geschrieben:Eigentlich sind mir die Namen egal. Ich möchte Quasi eine i x k Matrix mit hinterlegten Wertetabellen.
Also eher ein Objekt N(i,k) in dem Ich Werte setzten und auslesen kann...
Das meine ich mit "was willst du
eigentlich tun"

ich hab mein code-Beispiel oben mal entsprechend erweitert.
Wenn deine Matrix einigermaßen voll ist, würde ich eine verschachtelte liste statt einem dict nehmen:
Code: Alles auswählen
x, y = 5, 10
matrix = []
for i in range(x):
matrix.append([])
for k in range(y):
matrix[i].append(SomeClass(i, k))
# matrix[4][8] enthält nun SomeClass(4, 8)
oder kürzer:
Code: Alles auswählen
matrix = [ [ SomeClass(i, k) for k in range(5)] for i in range(10)]
Re: Funktion zur automatischen Objektinitaliserung
Verfasst: Freitag 7. Oktober 2011, 10:32
von 1st.try
Danke! ja das ist super das bringt mich erstmal weiter.
Re: Funktion zur automatischen Objektinitaliserung
Verfasst: Freitag 7. Oktober 2011, 10:49
von 1st.try
Also ich hab das jetzt mal in mein Programm eingebaut. Leider bleibt weiterhin das Problem, das wenn ich das Objekt von der Funktion
erstellen lasse, kein Objekt erstellt wird. Nur wenn ich
in main() wird auch wirklich ein Objekt erstellt. Woran liegt das ? Es wird doch egtl. beides mal das gleiche gemacht ?