ubuntuusers.de

Python: Eingabeparameter bei constructor

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Sauer2

(Themenstarter)

Anmeldungsdatum:
5. Mai 2008

Beiträge: 496

Ich will Werte der abgerufenen Instanz verändern und dann verändert wieder in die Liste schreiben. Oder geht das auch direkt über die for Variable?

Sauer2

(Themenstarter)

Anmeldungsdatum:
5. Mai 2008

Beiträge: 496

Ich hab jetzt mal versucht, eine Instanz in die Liste cam_list zu erstellen, allerdings:

descriptor 'append' requires a 'list' object but received a 'instance'

YEPHENAS

Anmeldungsdatum:
8. Juni 2009

Beiträge: 352

Sauer2 schrieb:

Ich hab jetzt mal versucht, eine Instanz in die Liste cam_list zu erstellen, allerdings:

descriptor 'append' requires a 'list' object but received a 'instance'

Du musst etwas mehr Informationen/Code geben, damit man sehen kann was falsch ist. Wie schon einer geschrieben hat - dieser Code hier läuft:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/usr/bin/env python

class SpyCam(object):
    def __init__(self, posx, posy):
        self.posx = posx
        self.posy = posy
        self.width = 12
        self.height = 12
        self.broken = True

camlist = []
camlist.append(SpyCam(123, 234))

Sauer2

(Themenstarter)

Anmeldungsdatum:
5. Mai 2008

Beiträge: 496

Alles klar, cam_list war bei mir falsch deklariert, Asche über mein Haupt.

DasIch

Avatar von DasIch

Anmeldungsdatum:
2. November 2005

Beiträge: 1130

Das einzige was man in Python deklariert sind Namen und zwar als global oder nonlocal wobei du zumindest ersteres vermeiden solltest.

Die Ausnahme zeigt dass du irgendwas falsch definiert hast.

Sauer2

(Themenstarter)

Anmeldungsdatum:
5. Mai 2008

Beiträge: 496

Ich meine, ich hatte cam_list = list anstatt cam_list = [] geschrieben.

Und keine Sorge, globale Variablen benutze ich eigentlich nur, wenn die Performance es rechtfertigen würde. Z.B. wie hier für Java auf Android erklärt wird.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

@Sauer2: Falls das noch nicht klar geworden sein sollte: Objekte werden in Python nie implizit kopiert. Wenn Du mit for für eine Liste iterierst, dann hast Du das gleiche Objekt vor Dir, auf das auch in der Liste verwiesen wird.

Du hättest an list auch einfach Klammern anhängen können, dann wird auch eine leere Liste erstellt. Den Datentyp sollte man aus Namen übrigens wenn's geht raushalten. Wenn man den Typ nämlich irgendwann mal ändert, dann muss man die Namen auch ändern, oder man hat Quelltext mit irreführenden Namen drin.

Sauer2

(Themenstarter)

Anmeldungsdatum:
5. Mai 2008

Beiträge: 496

Jo, danke. Habe ich vorhin auchschon festgestellt und die Liste braucht auch nicht mehr geändert zu werden. 😉

Antworten |