Hallo,
ich habe bisher in Python nur kleine Sachen programmiert und versuche mich nun an OOP, bin da also Anfänger. Ich habe eine Frage zu Klassen und Instanzen. Ist es möglich Namen von Instanzen während des Programmablaufes dynamisch zu erzeugen?
Folgendes soll zB realisiert werde: Eine Datenbank soll, sagen wir, Mitglieder verwalten. Dazu gibt es eine Klasse „Mitglied“ von der dann je nach Bedarf verschiedene Instanzen erzeugt werden (z.b. M1, M2 ... Mx), deren Attribute wie zB Familienstand oder Kinder später einzeln verändert werden können. Ich dachte mir, ich könnte eine Zählschleife machen, damit fortlaufend nummerierte Namen generieren und mit diesen (eine vorher nicht festgelegte Zahl von) Instanzen erzeugen. Aber so einfach scheint das nicht zu gehen? Sind Klassen und Instanzen doch nicht das Richtige für so eine Problemstellung?
Hab‘ eine Weile gesucht und nichts Hilfreiches gefunden.
Vielen Dank! Georg
Namen von Instanzen dynamisch erzeugen?
Das was du brauchst ist eine Liste.
http://docs.python.org/2/library/stdtypes.html#typesseq
http://docs.python.org/2/tutorial/datastructures.html
http://docs.python.org/2/library/stdtypes.html#typesseq
http://docs.python.org/2/tutorial/datastructures.html
»Honk Honk«
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Oder ein Set oder ein Dictionary oder... Es gibt eben verschiedene Collections für verschiedene Zwecke.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Grundsätzlich schon. Nur dein Verständnis von beiden ist falsch. Stell dir die Klassenbezeichnung einfach als Typangabe vor (analog zu Typ Zahl, Typ Zeichenkette, etc). Eine Instanz hingegen ist das aufgrund der Typangabe erstellte Objekt (also z.B. eine konkrete Zahl mit einem bestimmten Wert). Du willst also eigentlich nicht `Mitglied1` haben, sondern vielmehr ein Objekt vom Typ `Mitglied` mit der Mitgliedsnummer 1 als sein Instanzattribut (also `mitglied.nummer = 1` oder etwas ähnliches).Boa70 hat geschrieben:Sind Klassen und Instanzen doch nicht das Richtige für so eine Problemstellung?
Wenn du Objekte eines Typen sammeln möchtest, dann stecke sie in einen Container (z.B. eine Liste). Aber das wurde ja bereits erwähnt.
Verstehe. Mit einer Liste hatte ich ursprünglich auch gemacht, wollte das zur Übung dann mit Instanzen probieren.
Danke für die schnellen Antworten, snafus Erläuterung hat mich glaube ich in die richtige Richtung gebracht. Damit ich's auch wirklich kapiere: Die zu erzeugenden Instanzen müssen also schon sämtlich im Programm vorgegeben sein müssen, das kann nicht während des Ablaufes angepasst werden, richtig?
Danke für die schnellen Antworten, snafus Erläuterung hat mich glaube ich in die richtige Richtung gebracht. Damit ich's auch wirklich kapiere: Die zu erzeugenden Instanzen müssen also schon sämtlich im Programm vorgegeben sein müssen, das kann nicht während des Ablaufes angepasst werden, richtig?
Du kannst in Listen so viele Elemente reinpacken wie du möchtest und die Liste zu jedem Zeitpunkt um neue Instanzen erweitern.Boa70 hat geschrieben:Damit ich's auch wirklich kapiere: Die zu erzeugenden Instanzen müssen also schon sämtlich im Programm vorgegeben sein müssen, das kann nicht während des Ablaufes angepasst werden, richtig?
Das Leben ist wie ein Tennisball.
Es wäre bestimmt möglich Instanzen während der Laufzeit zu erzeugen/anzupassen und zu nutzen, aber das möchtest du gar nicht.Boa70 hat geschrieben:Damit ich's auch wirklich kapiere: Die zu erzeugenden Instanzen müssen also schon sämtlich im Programm vorgegeben sein müssen, das kann nicht während des Ablaufes angepasst werden, richtig?
Wenn du z.B. die Instanz "Mensch" hast, dann kannst du während der Laufzeit die jeweiligen Familienmitglieder erzeugen indem du der Instanz die Werte übergibst z.B. "Alter", "Geschlecht", ....
Damit kannst du mehrere Variablen mit den jeweiligen Familienmitgliedern des Types Mensch erzeugen, die unterschiedliche Eigenschaften haben. und wie bereits gesagt in einer Liste zusammenfassen.
@Dami123: Ich glaube Du verwechselt da gerade Instanzen und Klassen. (Wobei Klassen in Python natürlich auch Instanzen sind.)
Da wirfst du etwas durcheinander. Listen und Instanzen sind so unterschiedliche Dinge, dass sie nicht einmal vergleichbar sind. Deine konkrete Liste ist ja im Endeffekt sogar eine Instanz (ein Exemplar) einer Listen-Klasse.Boa70 hat geschrieben:Verstehe. Mit einer Liste hatte ich ursprünglich auch gemacht, wollte das zur Übung dann mit Instanzen probieren.
Falsch.Boa70 hat geschrieben:Damit ich's auch wirklich kapiere: Die zu erzeugenden Instanzen müssen also schon sämtlich im Programm vorgegeben sein müssen, das kann nicht während des Ablaufes angepasst werden, richtig?
Code: Alles auswählen
>>> class Thing(object):
pass
>>> data = []
>>> for i in range(5):
data.append(Thing())
>>> print(data)
[<__main__.Thing object at 0x030E9250>, <__main__.Thing object at 0x030F00B0>, <__main__.Thing object at 0x030F0710>, <__main__.Thing object at 0x030FBEB0>, <__main__.Thing object at 0x030FBEF0>]