Hallo!
Folgendes Problem:
Ich erstelle in einer Schleife eine Menge von Eigenschaften|Methoden einer Klasse. Diese sollen ihre namen in abhängigkeit des schleifendurchlaufs erhalten, zB:
for i in range(1,4):
[...] gesuchter Vorgang hier [...]
sollte dann folgendes ergeben:
self.var1
self.var2
self.var3
Kann mir jemand sagen, wie ich im obigen beispiel die variablen var(i) in abhängigkeit der variable i benenne?
dynamische funktions/variablen-namen
Also prinzipiell geht das mit eval und / oder exec, aber dynamische Variablennamen sind eigentlich schlechter Stil... Ich weiß nicht in welcher Abhängigkeit du das brauchst, aber wäre es nicht leichter Listen oder Dictionarys zu nehmen ?
Ps.: benutze bitte das nächste mal für Beispielcode die [code]...[/code] Tags, da bleibt die Formatierung erhalten.
Ps.: benutze bitte das nächste mal für Beispielcode die [code]...[/code] Tags, da bleibt die Formatierung erhalten.
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Zatic,
wie Milan schon sagte, für solche zwecke bieten sich Listen oder Dictionaries an. Hier ein Beispiel mit einem Dictionary:
Gruß
Dookie
wie Milan schon sagte, für solche zwecke bieten sich Listen oder Dictionaries an. Hier ein Beispiel mit einem Dictionary:
Code: Alles auswählen
>>> var = {}
>>> for i in xrange(1,4):
... var[i] = i*2
...
>>> print var
{1: 2, 2: 4, 3: 6}
>>> print var[1]
2
>>> print var[2]
4
Gruß
Dookie
okay, also die ausfürhliche version:
Ich bin dabei ein kleines Spiel zu programmieren (vielleicht kennt jemand das kartenspiel SET?).
Hier der bisherige quelltext: http://www.rafb.net/paste/results/eu491851.html
In Zeile 175 wird ein Button erstellt, und auf diesen ein Bild gelegt. Das ganze in einer schleife mit 12 durchläufen, so dass 12 bilder erscheinen.
Klickt man nun 3 bilder in einer betimmten reihenfolge an, sollen diese 3 entfernt und durch 3 neue ersetzt werden.
die karten sind alle in einer liste gespeichert, die in zeile 146 erstellt wird.
Die methode gotSet() soll in Zeile 95-105 dann eben diese neuen buttons einfügen. Aber genau das funktioniert nicht, die alten bleiben unverändert an ort und stelle.
Ich mach halt zum ersten mal was mit PyGTK und hab davon nicht so die ahnung?
irgendwelche vorschläge, ideen?
Ich bin dabei ein kleines Spiel zu programmieren (vielleicht kennt jemand das kartenspiel SET?).
Hier der bisherige quelltext: http://www.rafb.net/paste/results/eu491851.html
In Zeile 175 wird ein Button erstellt, und auf diesen ein Bild gelegt. Das ganze in einer schleife mit 12 durchläufen, so dass 12 bilder erscheinen.
Klickt man nun 3 bilder in einer betimmten reihenfolge an, sollen diese 3 entfernt und durch 3 neue ersetzt werden.
die karten sind alle in einer liste gespeichert, die in zeile 146 erstellt wird.
Die methode gotSet() soll in Zeile 95-105 dann eben diese neuen buttons einfügen. Aber genau das funktioniert nicht, die alten bleiben unverändert an ort und stelle.
Ich mach halt zum ersten mal was mit PyGTK und hab davon nicht so die ahnung?
irgendwelche vorschläge, ideen?
hmm, nein, das geht leider nicht...
Ich hab auch daran gedacht, erst einmal die alten buttons zu unrealizen, und dann die neuen einzusetzen. Deshalb wollte ich ja den buttons die dynamischen namen geben..
www.zatic.net/set/set.tar.gz enthält auch einen großteil der bilder..
Ich hab auch daran gedacht, erst einmal die alten buttons zu unrealizen, und dann die neuen einzusetzen. Deshalb wollte ich ja den buttons die dynamischen namen geben..
www.zatic.net/set/set.tar.gz enthält auch einen großteil der bilder..
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Falls Du mit dem Dictionary ned klar kommst, könntest Du auch mit setattr arbeiten.
Alsz z.B.
Mit getattr() kannst Du dann auf die Buttons auch zugreifen.
Beispiel:
Gruß
Dookie
Alsz z.B.
Code: Alles auswählen
setattr(self, "button"+str(x), gtk.Button(...))
Beispiel:
Code: Alles auswählen
image = getattr(self,"button"+str(x)).children()[0]
Dookie