Seite 1 von 1
dynamische funktions/variablen-namen
Verfasst: Samstag 30. August 2003, 16:51
von Zatic
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?
Verfasst: Samstag 30. August 2003, 17:06
von Milan
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.
Verfasst: Samstag 30. August 2003, 17:43
von Dookie
Hi Zatic,
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
Verfasst: Samstag 30. August 2003, 17:56
von Gast
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?
Verfasst: Samstag 30. August 2003, 19:48
von Dookie
eventuell hilft ein self.table.realize() nach Zeile 114, ich konnte es leider nicht testen, weil ich die Bildchen für die Buttons/Karten nicht habe.
Dookie
Verfasst: Montag 1. September 2003, 14:18
von Zatic
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..
Verfasst: Montag 1. September 2003, 17:58
von Dookie
wie oben schon gezeigt, pack die Buttons in ein Dictionary (self.buttons), über das Du dann die Buttons ansprechen kannst und die Labelgrafiken austauschen.
Dookie
Verfasst: Dienstag 2. September 2003, 16:15
von Dookie
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