Variabler Objektnamen

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
ax_perience
User
Beiträge: 2
Registriert: Dienstag 4. Januar 2022, 12:03

Hallo in die Runde,
entschuldigt bitte, wenn das Thema an falscher Stelle stehen sollte. Ich bin Newbie und habe folgendes Ziel: Ich möchte verschiedene PriorityQueues anlegen, deren Name flexibel sein sollte:

Hier mal ein Skript-Beispiel:

Code: Alles auswählen

id = "123"
channel = "channel"

listenobjekt = id + "." + channel
listenobjekt = queue.PriorityQueue()

listenobjekt.put("1234")
Klappt alles.
Zu einem späteren Zeitpunkt möchte ich die Liste erweitern - also gehe ich wieder wie oben vor:

Code: Alles auswählen

id = "123"
channel = "channel"

listenobjekt = id + "." + channel
listenobjekt = queue.PriorityQueue()

listenobjekt.put("1234")
Jetzt erhalte ich eine Fehlermeldung: AttributeError: 'str' object has no attribute 'put'
Es scheint, als gebe es die Liste nicht mehr. Könnt ihr mir weiterhelfen?

Danke Euch + frohes neues allen!
Äx
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst deine Queues in einem Wörterbuch (dict) verwalten. Eine “Vorbelegung” mit einem Namen erzeugt nicht magisch einen dynamischen Bezeichner.
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Für diesen Fall benutzt man Wörterbücher:

Code: Alles auswählen

id = "123"
channel = "channel"
queues = {}
queues[f"{id}.{channel}"] = queue.PriorityQueue()
...
queues[f"{id}.{channel}"].put("1234")
ax_perience
User
Beiträge: 2
Registriert: Dienstag 4. Januar 2022, 12:03

Hi Sirius3,
mega. Das löst mein Vorhaben/Problem. Tausend Dank

Grüße
Äx
Antworten