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.
Ich würde gerne mehrere Objekte des gleichen Typs erstellen. Der Name (Bezeichner) jedes zu erstellenden Objektes soll sich aus einem festen Präfix und String-Elementen aus einem Tupel zusammensetzen.
Etwas Python-Code zur Verdeutlichung was ich meine:
@Atalanttore: Ja, aber ich würde da ja erst einmal fragen warum das Attribute sein müssen und warum Du das nicht einfach in ein Wörterbuch stecken kannst das die Namen auf die Timer abbildet. Also beispielsweise anstelle der Liste. Und dann nur noch eine `_start_pump()`-Methode die den Namen der Pumpe als Argument bekommt.
__blackjack__ hat geschrieben: Freitag 25. Oktober 2019, 19:43
@Atalanttore: Ja, aber ich würde da ja erst einmal fragen warum das Attribute sein müssen und warum Du das nicht einfach in ein Wörterbuch stecken kannst das die Namen auf die Timer abbildet. Also beispielsweise anstelle der Liste. Und dann nur noch eine `_start_pump()`-Methode die den Namen der Pumpe als Argument bekommt.
Natürlich könnte ich auch ein Wörterbuch nehmen, das die Namen auf die Timer abbildet. Mich würde nur interessieren, ob und wie man Bezeichner für Objekte aus Strings individuell zusammensetzen kann.
Atalanttore hat geschrieben: Samstag 26. Oktober 2019, 12:38
Mich würde nur interessieren, ob und wie man Bezeichner für Objekte aus Strings individuell zusammensetzen kann.
class Foo:
def create_attribute(self, key, value):
setattr(self, f'dynamic_{key}', value)
bar = Foo()
bar.create_attribute('baz', 42)
print(bar.dynamic_baz)
Aber wie gesagt: Tu es nicht! Genau für so etwas gibt es passende Datenstrukturen wie ein Dictionary. Im Endeffekt müsstest du ja doch wissen wie die Attribute heißen oder du baust dir die komplette Logik nach, die du mit einem Dictionary ohnehin bekommst.
Ein Dictionary ist als Datenstruktur auch in vielen anderen höheren Programmiersprachen bekannt (häufig auch Mapping genannt). Das ist keine spezielle Erfindung von Python. Auch muss man es nicht zwingend für Objekte gleicher Bauart verwenden.
Hier ist es aber sinnvoll, die Beziehung Name -> Methode darüber abzubilden. Wobei ich getattr() hier auch nicht falsch finde, falls man ohnehin auf der Klasseninstanz arbeitet...
Die Frage bei den Attributen ist IMHO ob man da nur programmatisch drauf zugreift. Falls ja, stellt sich die Frage was da der Vorteil gegenüber einem dedizierten Wörterbuch sein soll. Denn auch die Attribute landen ja letztendlich in einem Wörterbuch (`__dict__` von dem Objekt), nur das sie sich da den Namensraum mit anderen ”Dingen” teilen. Warum macht das Sinn? Gibt es irgendwo Code wo der Programmierer tatsächlich im Quelltext über das Attribut zugreift in dem er die Namen selbst ausschreibt?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
@Atalanttore: Es war zwar nicht Deine Frage, aber ich würde die Strukturierung der Anwendung kritisch betrachten. Du hast bislang keine Maschine, sondern Pumpen. Vorschlag: modelliere zunächst die Pumpen. In einer späteren Machine-Klasse könntest Du dann Pumpen als Attribute anlegen (hier beispielhaft als dict umgesetzt):