Seite 1 von 1

Array von Objekten anlegen

Verfasst: Montag 12. Januar 2009, 16:07
von tokstolle
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

Verfasst: Montag 12. Januar 2009, 16:23
von numerix

Verfasst: Montag 12. Januar 2009, 16:24
von derdon
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.

Re: Array von Objekten anlegen

Verfasst: Montag 12. Januar 2009, 16:58
von Mad-Marty
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"]

Re: Array von Objekten anlegen

Verfasst: Montag 12. Januar 2009, 17:43
von Darii
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

Verfasst: Montag 12. Januar 2009, 17:54
von tokstolle
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

Verfasst: Montag 12. Januar 2009, 18:12
von BlackJack
Die Lösungen sind übertragbar. Setze Dich mit Listen auseinander. Ist ein absolut grundlengender Python-Datentyp.

Verfasst: Montag 12. Januar 2009, 18:18
von numerix
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:

Verfasst: Montag 12. Januar 2009, 18:22
von tokstolle
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

Verfasst: Montag 12. Januar 2009, 19:36
von BlackJack
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.

Verfasst: Montag 12. Januar 2009, 22:22
von tokstolle
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

Verfasst: Montag 12. Januar 2009, 22:33
von Leonidas
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.

Verfasst: Montag 12. Januar 2009, 23:09
von __marcus__
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.

Verfasst: Dienstag 13. Januar 2009, 08:13
von Hyperion
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 ^^

Verfasst: Dienstag 13. Januar 2009, 11:37
von cofi
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 ;)

Verfasst: Dienstag 13. Januar 2009, 12:18
von tokstolle
Leonidas hat geschrieben: 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.
Naja, es ist ja für ein Projekt an der FH. Ausserdem ist das nicht die erste Programmiersprache mit der ich arbeite.
Hyperion hat geschrieben: Hehe ... also bei den meisten Ministern in Deutschland hat man exakt diesen Eindruck ^^.
He, das geht zu weit, ich bin kein ignoranter Vollidi... ja! :wink:

Grüsse Tokstolle

Verfasst: Dienstag 13. Januar 2009, 14:23
von BlackJack
@tokstolle: Wenn man schon Erfahrung mit anderen Programmiersprachen hat, ist es trotzdem wichtig, die Grundlagen der neuen Sprache zu lernen, sonst schreibt man schnell mal die alte Sprache mit der Syntax der Neuen. So einfach sind Sprachen nicht austauschbar wenn man idiomatischen Quelltext schreiben will. Schön zu sehen an Deinem Ansatz einem "Array" per Indexzugriff etwas zuweisen zu wollen.