Klassen - Instanziierung - "dynamische Variablen" :K

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
klausb
User
Beiträge: 2
Registriert: Freitag 21. Juni 2013, 10:40

Hallo liebe Gemeide,

ich laufe seit Stunden gegen ne Wand und komme einfach nicht weiter. Ich versuche, mich kurz zu fassen..

Ich habe eine leere Liste

Code: Alles auswählen

list = []
in "Modul a", ich parse eine *.txt o.ä. und fülle list mit "Variablen".
Hinterher steht dann in der Liste

Code: Alles auswählen

list = ["variable1","variable2", "variable3",...,"variableN"]
Weiter habe ich eine Klasse

Code: Alles auswählen

class Klasse(object): 
        pass
Ich möchte, und das funktioniert auch soweit automatisiert über eine "for-Schleife", mit den geparsten Variablen aus

Code: Alles auswählen

list[]
N-Instanzen der Klasse "Klasse" isntanziieren.

Code: Alles auswählen

list[i] = Klasse()

Diese Instanzen liegen jetzt irgendwo bei mir im Speicher rum, nur kann ich nicht damit arbeiten.

Code: Alles auswählen

<Klasse.Klasse object at 0x010340FB>
Mit arbeiten meine ich wieder in einem anderen Modul z.b. dann

Code: Alles auswählen

 variable1.setWert(800)
Dem Interpreter fehlt da natürlich die Referenzierung was überhautp "variable1" ist...Versteht ihr mein Problem?^^

Ich möchte kurz gesagt diverse, in der Anzahl variabel, Instanzen der Klasse "Klasse", mit welchen ich hinterher in meinem 'main'-Modul arbeiten kann...entwerder is mein Code derart scheiße, oder ich hab einen zu komplizierten Ansatz.

import, exec, wasauchimmer...alles schon versucht...

Vielen Dank!
BlackJack

@klausb: Kann es sein dass Du einfach ein Wörterbuch (`dict`) haben willst, welches die Namen aus der Liste auf Exemplare von `Klasse` abbildet‽

Ansonsren wäre echter Quelltext vielleicht besser als diese Versatzstücke die teilweise syntaktisch falsch sind (``list[]``) oder teilweise nicht verraten wie Namen initialisiert wurden (`i` in `list = Klasse()`).

Nur so als Vermutung: Wenn `Klasse` das einzige im Modul `Klasse` ist, dann stimmt eventuell etwas mit der Aufteilung nicht. Eine Klasse pro Modul ist in Python unüblich. Wir sind hier nicht bei Java wo eine Klasse pro Datei definiert wird. Module sind eher wie Java-Packages zu sehen. Triviale Getter und Setter schreibt man in Python eigentlich auch nicht. Das `setWert()` würde dann eher so aussehen: ``obj.wert = 800``.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

klausb hat geschrieben:Mit arbeiten meine ich wieder in einem anderen Modul z.b. dann

Code: Alles auswählen

 variable1.setWert(800)
Dem Interpreter fehlt da natürlich die Referenzierung was überhautp "variable1" ist...Versteht ihr mein Problem?^^

Ich möchte kurz gesagt diverse, in der Anzahl variabel, Instanzen der Klasse "Klasse", mit welchen ich hinterher in meinem 'main'-Modul arbeiten kann...entwerder is mein Code derart scheiße, oder ich hab einen zu komplizierten Ansatz.
Der Ansatz als solcher ist falsch. Du solltest nicht neue Bezeichner erfinden, sondern die Namen als Schlüssel in einem Dictionary verfügbar machen.

Code: Alles auswählen

class Thing(object):
    def say_something(self):
        print "I'm a Thing"

data = ['value_1', 'value_2', 'parrot']

things = {}
for value in data:
    things[value] = Thing()

# das ist eine dict-comprehension und sie macht das gleiche wie die drei Codezeilen davor
things = {value: Thing() for value in data}

print things

things['value_2'].say_something()
things['parrot'].say_something()
klausb
User
Beiträge: 2
Registriert: Freitag 21. Juni 2013, 10:40

@ /me @blackjack

Ich sollte es so implementieren, wird schon einen Grund haben. Habe gestern die dict-Varainte schon versucht, wohl aber einen kleinen Fehler gemacht. ...... :oops: :shock: :?

/me's Methode funktioniert, vielen herzlichen Dank dafür! Schnell und kompetent!

Schönes WE euch beiden
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

klausb hat geschrieben:Ich sollte es so implementieren, wird schon einen Grund haben.
Bitte verwende trotzdem nicht Namen von Built-ins als Bezeichner. list ist ein sehr unglücklicher Name.

Wenn du list plattbügelst, dann kannst du das Built-In nicht mehr verwenden.

Code: Alles auswählen

>>> list = list((1, 2, 3))
>>> list
[1, 2, 3]
>>> list = list((1, 2, 3))

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    list = list((1, 2, 3))
TypeError: 'list' object is not callable
peevauwee
User
Beiträge: 1
Registriert: Freitag 26. Juli 2013, 12:55

Ich habe, jetzt sage ich richtiger hatte, ein vergleichbares Problem und habe tagelang im Netz, Dokus und Tutorials gesucht
und nichts gefunden, was vielleicht auch an meiner geringen python-Kenntnis liegt.

Aber hier im Forum 10 Minuten gesucht und prompt eine funktionierende Lösung gefunden.

DANKE
Antworten