Problem mit Iteration

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
Douchbag
User
Beiträge: 9
Registriert: Freitag 4. März 2016, 17:39

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?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@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!
Douchbag
User
Beiträge: 9
Registriert: Freitag 4. März 2016, 17:39

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.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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. ;)
Douchbag
User
Beiträge: 9
Registriert: Freitag 4. März 2016, 17:39

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