Objektorientiert Objekte später erzeugen und verwalten

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
Sayala
User
Beiträge: 8
Registriert: Freitag 7. Dezember 2007, 17:20
Kontaktdaten:

Hallo liebe Python freund,
ich hab mich nach einer längern Programmierpause an ein kleines neues Projekt gesetzt und sitze vor einem Problem. Ich hab mich mit Pygame etwas angefreundet und Snake Programmiert. Jetzt will nun ein eigenes Spiel entwerfen. Zu meinem Problem:
Wenn ich z.b. eine Klasse Auto habe kann ich sie ansteuern indem ich z.b. schreibe

Code: Alles auswählen

class Auto(object):
    def __init__( ... )
        .
        .
        .


Blaues_auto = Auto( ... )
Das Problem dabei ist, dass ich vorher schon wissen muss, wie viele Autos ich haben will um sie alle zu verwalten. Aber ich will die Objekte wärend des spiels beliebig oft erzeugen (ggf. entfernen) und alle müssen ansteuer bar sein. Ansätze von lösungen mit Listen haben bis jetzt leider keine erfolge gezeigt.

Suchmaschiene haben leider bei der anzahl an wörter probleme mir was vernüftiges wiederzugeben und Tutorials zeigen nur die fixierte Methode.

Ich denke ich bin nicht der erste mit diesem Problem und ich hoffe, dass mir jemand mit Erfahrung dabei helfen kann.
Vielen dank schonmal im Voraus.
www.danasoft/sig/sayala.jpg
BlackJack

@Sayala: Du müsstest die Autos halt in eine Datenstruktur stecken. Zum Beispiel in eine Liste.
Sayala
User
Beiträge: 8
Registriert: Freitag 7. Dezember 2007, 17:20
Kontaktdaten:

Vielen dank!

Hab es direkt getestet und es klappt :D
Hier der Beispielcode für eine Lösung:

Code: Alles auswählen

liste = []
class Auto(object):
    def __init__(self,farbe):
        self.farbe = farbe
    
liste.append(Auto("blau"))
liste.append(Auto("rot"))
liste.append(Auto("schwarz"))

for i in range(len(liste)):
    liste[i].farbe = "lila"

for i in range(len(liste)):        #Als Beweis, dass sich die Farben geändert haben
    print liste[i].farbe
www.danasoft/sig/sayala.jpg
deets

Bitte nicht mittels range iterieren - das ist unnoetig in Python (meistens jedenfalls)

Es geht viel einfacher mit

Code: Alles auswählen

for auto in liste:
     auto.farbe = "lila"

Sayala
User
Beiträge: 8
Registriert: Freitag 7. Dezember 2007, 17:20
Kontaktdaten:

@Deets
In diesem Fall wäre es einfacher aber das war auch ein vereinfachtes beispiel. Wenn ich z.b. Punkte habe die sich auf einem koordinaten system bewegen muss ich die geschwindigkeit und die neue Position für jeden Punkt bestimmen. In dem fall würde ich sagen, müsste man die gesamte Liste entlang laufen

Edit:
oder ist dies auch möglich mit:

Code: Alles auswählen

for auto in liste:
     auto.farbe = berechnung_neue_position()
?
www.danasoft/sig/sayala.jpg
Sayala
User
Beiträge: 8
Registriert: Freitag 7. Dezember 2007, 17:20
Kontaktdaten:

Sayala hat geschrieben:@Deets
In diesem Fall wäre es einfacher aber das war auch ein vereinfachtes beispiel. Wenn ich z.b. Punkte habe die sich auf einem koordinaten system bewegen muss ich die geschwindigkeit und die neue Position für jeden Punkt bestimmen. In dem fall würde ich sagen, müsste man die gesamte Liste entlang laufen

Edit:
oder ist dies auch möglich mit:

Code: Alles auswählen

for auto in liste:
     auto.position = berechnung_neue_position()
?
www.danasoft/sig/sayala.jpg
deets

In der Zeit, in der du das Posting geschrieben hast, haettest du das schon ausprobieren koennen.. ;)

Und natuerlich geht das auch so - was ist denn an einer position fundamental anders als an einer Farbe? Beides sind in diesem Fall nur Attribute eines Objektes.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Es gibt enumerate, ein kleines Beispiel:

Code: Alles auswählen

In [11]: autos = list()

In [12]: autos.append('bmw')

In [13]: autos.append('ford')

In [14]: autos.append('audi')

In [15]: print(autos)
['bmw', 'ford', 'audi']

In [17]: for index, auto in enumerate(autos):
   ....:     print(index, autos[index], auto)
   ....: 
0 bmw bmw
1 ford ford
2 audi audi
the more they change the more they stay the same
Antworten