Array von Objekten anlegen

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.
tokstolle
User
Beiträge: 9
Registriert: Mittwoch 3. Dezember 2008, 21:39

Montag 12. Januar 2009, 16:07

Hallo zusammen,
zum Einstand eine wirkliche Newbie-Frage:

Wie kann ich ein array von Objekten erzeugen?

Also folgende Klasse:

Code: Alles auswählen

class A(object): 
         def __init__(self): 
               self.a
               self.b
Und ich möchte nun in einer Schleife ein Array von diesem Objekt anlegen:

Code: Alles auswählen

for i in range(5):
         self.myA[i] = A()
bekomme aber nur die Medlung:

Code: Alles auswählen

AttributeError: myA
Wie macht man das richtig? In keiner meiner Doku wird dieser Fall beschrieben.

Vielen Dank

Grüsse Tokstolle
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Montag 12. Januar 2009, 16:23

Zuletzt geändert von numerix am Montag 12. Januar 2009, 16:25, insgesamt 1-mal geändert.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Montag 12. Januar 2009, 16:24

Suchst du so etwas?

Code: Alles auswählen

In [89]: class A(object):
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def __repr__(self):
        return 'a = %r \t b = %r' % (self.a, self.b)
   ....:     
   ....:     

In [95]: [A(a, b) for a, b in zip(xrange(1,9), xrange(9, 17))]
Out[95]: 
[a = 1 	 b = 9,
 a = 2 	 b = 10,
 a = 3 	 b = 11,
 a = 4 	 b = 12,
 a = 5 	 b = 13,
 a = 6 	 b = 14,
 a = 7 	 b = 15,
 a = 8 	 b = 16]
Die Namen der Variablen sollte man auf jeden Fall besser wählen. Aber das ist ja nur ein Beispiel.

EDIT: in __repr__() wird jetzt ein Tab als Seperator benutzt um Verwirrungen zu vermeiden.
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Montag 12. Januar 2009, 16:58

tokstolle hat geschrieben:Hallo zusammen,
zum Einstand eine wirkliche Newbie-Frage:

Wie kann ich ein array von Objekten erzeugen?

Also folgende Klasse:

Code: Alles auswählen

class A(object): 
         def __init__(self): 
               self.a
               self.b
Und ich möchte nun in einer Schleife ein Array von diesem Objekt anlegen:

Code: Alles auswählen

for i in range(5):
         self.myA[i] = A()
bekomme aber nur die Medlung:

Code: Alles auswählen

AttributeError: myA
Wie macht man das richtig? In keiner meiner Doku wird dieser Fall beschrieben.

Vielen Dank

Grüsse Tokstolle

Code: Alles auswählen

mylist = [1, 2, "text"]
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Montag 12. Januar 2009, 17:43

tokstolle hat geschrieben:bekomme aber nur die Medlung:

Code: Alles auswählen

AttributeError: myA
Ich bin mit ziemlich sicher, dass das nicht die ganze Fehlermeldung ist. Poste beim nächsten Mal bitte die ganze Meldung und lass nicht irgendwas weg, was dir unwichtig erscheint.

Und dann poste auch einen lauffähigen Code.

Code: Alles auswählen

for i in range(5):
         self.myA[i] = A()
gibt bei mir nämlich

Code: Alles auswählen

NameError: name 'self' is not defined
tokstolle
User
Beiträge: 9
Registriert: Mittwoch 3. Dezember 2008, 21:39

Montag 12. Januar 2009, 17:54

Also erst mal Danke für die Lösungen. Aber das Problem liegt eigentlich eher im Bereich Qt-Programmierung. Und ich weiß nicht ob Eure Lösungen darauf übertragbar sind.
Möglicherweise muss man das Posting verschieben.
Bisher habe ich meine Widgets immer brav hintereinander geschrieben.

Code: Alles auswählen

...
self.ver1Edit3 = QtGui.QLineEdit()
self.ver1Edit4 = QtGui.QLineEdit()
self.ver1Edit5 = QtGui.QLineEdit()...
Und jetzt wollt ich vor dem Erzeugen des Widgets eine Abfrage machen, wieviele Eingabefelder erzeugt werden sollen:

Code: Alles auswählen

from PyQt4 import QtGui, QtCore

class WriteRegister(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setObjectName("WriteRegister")
        self.resize(550, 300)
        self.setWindowTitle('WriteRegister')

        self.myLayout = QtGui.QVBoxLayout()

       for i in range(5):
               self.myInput[i] = QtGui.QLineEdit()
               self.myLayout.addWidget(self.myInput[i])
....

Grüsse Tokstolle
BlackJack

Montag 12. Januar 2009, 18:12

Die Lösungen sind übertragbar. Setze Dich mit Listen auseinander. Ist ein absolut grundlengender Python-Datentyp.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Montag 12. Januar 2009, 18:18

tokstolle hat geschrieben:Also erst mal Danke für die Lösungen. Aber das Problem liegt eigentlich eher im Bereich Qt-Programmierung. Und ich weiß nicht ob Eure Lösungen darauf übertragbar sind.
Bisher habe ich meine Widgets immer brav hintereinander geschrieben.
Wie kann man GUI-Programmierung mit Python betreiben, ohne zu wissen, was eine Liste ist? :shock:
tokstolle
User
Beiträge: 9
Registriert: Mittwoch 3. Dezember 2008, 21:39

Montag 12. Januar 2009, 18:22

Man kann sich nicht immer aussuchen, welche Tools zur Verfügung stehen. Ich muss mich in beide Technologien reinarbeiten. Mit Qt unter C++ habe ich ein bischen Erfahrung.

Grüsse Tokstolle
BlackJack

Montag 12. Januar 2009, 19:36

Aber man sollte das grundlegendere Werkzeug zumindest grundlegend beherrschen, bevor man das kompliziertere, auf dem Grundlegenden aufbauenden, in Angriff nimmt.

Arbeite am besten mal das Tutorial aus der Dokumentation durch.
tokstolle
User
Beiträge: 9
Registriert: Mittwoch 3. Dezember 2008, 21:39

Montag 12. Januar 2009, 22:22

BlackJack hat geschrieben:Aber man sollte das grundlegendere Werkzeug zumindest grundlegend beherrschen, bevor man das kompliziertere, auf dem Grundlegenden aufbauenden, in Angriff nimmt.

Arbeite am besten mal das Tutorial aus der Dokumentation durch.
Das ist schon richtig, ich wollte nur damit sagen, daß man eine Programmiersprache nicht immer über einen Kurs, sondern auch häufig über ein bestimmtes Projekt erlernen kann.
Also die verschiedenen Themen nicht der Reihe nach wie im Handbuch lernt sondern dann wenn man es braucht. Und naja, jetzt brauche ich halt die Listen.

Grüsse Tokstolle
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 12. Januar 2009, 22:33

tokstolle hat geschrieben:Das ist schon richtig, ich wollte nur damit sagen, daß man eine Programmiersprache nicht immer über einen Kurs, sondern auch häufig über ein bestimmtes Projekt erlernen kann.
Ja, aber es gibt auch dort gewisses Grundwissen.

Was würdest du zu jemandem sagen der Physik lernt, indem er bei der NASA/ESA eine Rakete baut? Quasi lernen am Projekt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
__marcus__
User
Beiträge: 92
Registriert: Mittwoch 10. September 2008, 22:10
Wohnort: Hamburg

Montag 12. Januar 2009, 23:09

tokstolle hat geschrieben:Das ist schon richtig, ich wollte nur damit sagen, daß man eine Programmiersprache nicht immer über einen Kurs, sondern auch häufig über ein bestimmtes Projekt erlernen kann.
Absolut. Aber wer sich gleich an PyQT ran traut, braucht auch die Doku nicht fürchten.
Leonidas hat geschrieben:Was würdest du zu jemandem sagen der Physik lernt, indem er bei der NASA/ESA eine Rakete baut? Quasi lernen am Projekt.
Der Kerl hat auf jeden Fall keine feuchten Hände beim Personalchef.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 13. Januar 2009, 08:13

Leonidas hat geschrieben: Was würdest du zu jemandem sagen der Physik lernt, indem er bei der NASA/ESA eine Rakete baut? Quasi lernen am Projekt.
Hehe ... also bei den meisten Ministern in Deutschland hat man exakt diesen Eindruck ^^
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dienstag 13. Januar 2009, 11:37

Hyperion hat geschrieben:
Leonidas hat geschrieben: Was würdest du zu jemandem sagen der Physik lernt, indem er bei der NASA/ESA eine Rakete baut? Quasi lernen am Projekt.
Hehe ... also bei den meisten Ministern in Deutschland hat man exakt diesen Eindruck ^^
Nicht ganz ... bei den meisten Ministern hat man den Eindruck, dass sie nicht lernen wollen, die Projekte aber trotzdem durchziehn ;)
Antworten