Seite 1 von 1
Problem mit Iteration
Verfasst: Samstag 12. März 2016, 14:34
von Douchbag
Hallo zusammen,
ich habe ein Problem mit meinem Code, da mein Code hier zu umfangreich wäre will ich das kurz an einem Beispiel zeigen.
Code: Alles auswählen
class Class1:
iterate = 0
def test(self):
iterate += 1
if iterate == 20:
break
while True:
class = Class1()
class.test()
Bei diesem Code habe ich das Problem (leider gerade nicht getestet), dass die SChleife endlos wäre. Das Problem ist wohl das die Klasse immer wieder neu deklariert wird und iterate auf 0 setzt. In meinem Code sind Klassen tief verwurzelt und ich arbeite mit PyGame und einer while Schleife. Wie kann ich das Problem elegant lösen?
Re: Problem mit Iteration
Verfasst: Samstag 12. März 2016, 14:48
von Sirius3
@Douchbag: Dein Problem kann ich bei dem gezeigten "Code" und Deiner Erklärung nicht verstehen. Du benutzt ein Klassenattribut, das eben nicht bei jeder neuen Instanz wieder auf 0 gesetzt wird. Die Methode test ist auf viele Art kaputt. iterate wird nicht initialisiert, break ist außerhalb von Schleifen nicht erlaubt. class ist ein reserviertes Wort und darf nicht als Variablennamen benutzt werden.
Zeig doch Code, der wirklich funktioniert und Dein Problem zeigt!
Re: Problem mit Iteration
Verfasst: Samstag 12. März 2016, 15:14
von Douchbag
meinen ganzen code will ich eigentlich nicht posten. mal eine generelle frage...
wenn ich, wie im code oben, eine klasse einer variable zuweise und das immer wieder in einer schleife wiederhole. tritt da nicht der fall ein, dass die variable iterator immer wieder auf 0 gesetzt wird? mir kommt es auf jedenfall so vor, da immer eine neue zuweisung stattfindet. muss ich die zuweisung class = Class1() außerhalb der while schleife anlegen?
Tut mir leid, wenn ihr mir so nicht helfen könnt ist es mir zu aufwendig. Da, wenn ich meinen Code poste, sicherlich noch viele Fragen geklärt werden müssen.
Mein Problem ist auf jedenfall, dass eine variable in einer Klasse immer ihren zugewiesenen wert behält und sich nicht verändert. Normal soll der wert sich immer um zB 1 verringern, aber das tut sie nicht.
Re: Problem mit Iteration
Verfasst: Samstag 12. März 2016, 15:32
von snafu
Douchbag hat geschrieben:wenn ich, wie im code oben, eine klasse einer variable zuweise und das immer wieder in einer schleife wiederhole. tritt da nicht der fall ein, dass die variable iterator immer wieder auf 0 gesetzt wird?
Wenn man es so wie in deinem Beispiel macht, dann lautet die Antwort: Nein, da es sich hierbei um ein Klassenattribut handelt, welches unabhängig von den erstellten Instanzen seinen Wert behält und folglich auch instanzübergreifend modifiziert werden kann - und daher meistens auch keine gute Idee ist.
Falls du hingegen Instanzattribute meinst (``self.wert = "irgendwas"``), dann lautet die Antwort: Ja, denn mit jeder neuen Instanz wird auch das Instanzattribut neu angelegt und bekommt dementsprechend wieder seinen Initialwert zugewiesen. Aber das hattest du dir ja im Grunde bereits selbst beantwortet.
Douchbag hat geschrieben:muss ich die zuweisung class = Class1() außerhalb der while schleife anlegen?
So ist es. Das hättest du ja eigentlich selbst mal ausprobieren können, wenn dir Ursache und Lösung bereits bekannt waren.

Re: Problem mit Iteration
Verfasst: Samstag 12. März 2016, 16:13
von Douchbag
snafu hat geschrieben:
Falls du hingegen Instanzattribute meinst (``self.wert = "irgendwas"``), dann lautet die Antwort: Ja, denn mit jeder neuen Instanz wird auch das Instanzattribut neu angelegt und bekommt dementsprechend wieder seinen Initialwert zugewiesen. Aber das hattest du dir ja im Grunde bereits selbst beantwortet.
Stimmt bei mir im Code benutze ich quasi self.iterator. das habe ich oben nicht erwähnt. dann muss ich mir was einfallen lassen.
Sollte ich dann am besten andere Klassen immer über Parameter an die nächste weitergeben?
Re: Problem mit Iteration
Verfasst: Samstag 12. März 2016, 16:26
von BlackJack
@Douchbag: Ich glaube Du versuchst hier grössere Architekturprobleme anhand von *einer* sinnfreien Klasse zu diskutieren. Das bringt nichts. Wie Klassen zusammenarbeiten hängt vom Problem und der Herangehensweise ab wie man die Lösung modelliert. Da gibt es nicht ganz allgemein, ohne die konkreten Gegebenheiten zu kennen, *die* Lösung.