Namen von Instanzen dynamisch erzeugen?

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
Boa70
User
Beiträge: 2
Registriert: Dienstag 25. Februar 2014, 16:45

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
Benutzeravatar
Balmung
User
Beiträge: 44
Registriert: Sonntag 17. März 2013, 18:36

»Honk Honk«
Benutzeravatar
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
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Boa70 hat geschrieben:Sind Klassen und Instanzen doch nicht das Richtige für so eine Problemstellung?
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).

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.
Boa70
User
Beiträge: 2
Registriert: Dienstag 25. Februar 2014, 16:45

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?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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?
Du kannst in Listen so viele Elemente reinpacken wie du möchtest und die Liste zu jedem Zeitpunkt um neue Instanzen erweitern.
Das Leben ist wie ein Tennisball.
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

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?
Es wäre bestimmt möglich Instanzen während der Laufzeit zu erzeugen/anzupassen und zu nutzen, aber das möchtest du gar nicht.
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.
BlackJack

@Dami123: Ich glaube Du verwechselt da gerade Instanzen und Klassen. (Wobei Klassen in Python natürlich auch Instanzen sind.)
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

@BlackJack
Sieht wohl ganz so aus :D

@Boa70
Du kannst während der Laufzeit Instanzen erzeugen und anschließend Werte übergeben z.B. mit einer Methode die die Werte ändert.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Boa70 hat geschrieben:Verstehe. Mit einer Liste hatte ich ursprünglich auch gemacht, wollte das zur Übung dann mit Instanzen probieren.
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: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?
Falsch.

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>]
Antworten