[gelöst] Klassen, die miteinander interagieren

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.
Zando
User
Beiträge: 37
Registriert: Sonntag 9. Juli 2006, 17:18

Beitragvon Zando » Donnerstag 28. Februar 2008, 10:33

Hyperion hat geschrieben:
Zando hat geschrieben:Wäre es auch guter Programmierstil Instanzen von Klassen in anderen Klassen zu verwenden?

Also wenn wir bei der Terminologie dieselbe Sprache sprechen (s.o.), dann muss man das sogar tun, wenn man denn mit verschachtelten Klassen arbeiten will! In meinem Beispiel hält das Attribut students eben eine Liste von Instanzen der Klasse Student. Prinzipiell wird eine Vernestelung immer auf diese Weise erreicht (neben Listen eben auch durch andere Container).


Die Antwort war mir gestern klarer, da ich meine Frage wieder unpräzise gestellt habe und die Antwort ja gepasst hat :)

Ich meinte eher: Wäre es guter Programmierstil die Instanzen auch in den anderen Klassen zu erzeugen? Ihr (Rebecca und du) erzeugt die Instanzen ja außerhalb der Klassen (anderen Instanzen?), während BlackJack sie innerhalb erzeugt.

Falls ich wieder sprachliche Probleme habe, hier ein Beispiel:

"ihr" macht es so:

Code: Alles auswählen

class Erste:
    pass
class Zweite:
    def __init__(self, wasvomersten):
        blablablub...

ausserhalb = Erste()
zweite = Zweite(ausserhalb)


und BlackJack so:

Code: Alles auswählen

class Erste:
    pass
class Zweite:
    def __init__(self):
        self.innerhalb = Erste()


Ok, ist mir während des Schreibens klarer geworden :D
BlackJacks Lösung ist eher dafür falls alle Zweite-Objekte(Instanzen) DASGLEICHE Erste-Objekt enthalten sollen und "eure" eher falls es verschiedene Erste-Objekte gibt, die in den verschiedenen Zweite-Objekten verwendet werden sollen?

So long
Carsten

edit: vor "innerhalb" im Quellcode noch ein "self" gesetzt...
Zuletzt geändert von Zando am Donnerstag 28. Februar 2008, 11:16, insgesamt 1-mal geändert.
Zando
User
Beiträge: 37
Registriert: Sonntag 9. Juli 2006, 17:18

Beitragvon Zando » Donnerstag 28. Februar 2008, 10:40

Hyperion hat geschrieben:
Zando hat geschrieben:

Kommt drauf an: Stichwort new-style-classes!
[wiki]New-Style Klassen[/wiki]?highlight=%28klasse%29


Kommt drauf an :D Eine typische Studentenantwort würde ich mal sagen. Aber obwohl ich in der Beschreibung nur Bahnhof verstehe, steht da was von alten Klassen fehleranfällig und da werde ich wohl die neue Variante bevorzugen...

So long
Carsten
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Donnerstag 28. Februar 2008, 10:56

Zando hat geschrieben:Ok, ist mir während des Schreibens klarer geworden :D
BlackJacks Lösung ist eher dafür falls alle Zweite-Objekte(Instanzen) DASGLEICHE Erste-Objekt enthalten sollen und "eure" eher falls es verschiedene Erste-Objekte gibt, die in den verschiedenen Zweite-Objekten verwendet werden sollen?

Nein, die __init__-Methode wird ja bei jedem Mal aufgerufen, wenn eine neue Instanz erzeugt wird. Also wird in BlackJacks fall bei jedem Erzeugen einer Zweite-Instanz auch eine neue Erste-Instanz erzeugt.

Der Unterschiede ist einfach der, dass bei BlackJacks halt "irgendeine" Erste-Instanz erzeugt wird, der Benutzer der Zweite-Klasse hat darauf keinen Einfluss. In meinen Fall kann der Benutzer der Zweite-Klasse genau entscheiden, welche Erzte-Instanz in der Zweite-Instanz vorhanden sein soll. Das macht in der Schulklassen-Klasse ja auch sinn: Es sind ganz bestimmte Schueler in der Klasse (Max Mustermann, Helga Hampel,...), nicht irgendwelche Standard-Schueler.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Zando
User
Beiträge: 37
Registriert: Sonntag 9. Juli 2006, 17:18

Beitragvon Zando » Donnerstag 28. Februar 2008, 11:13

@Rebecca: ich könnte mich jetzt rausreden und sagen, das mit dasgleiche ja unterschiedliche gemeint sind und nicht dasselbe. Aber da hab ich in dem Moment gar nicht so dran gedacht. Im Endeffekt ist es aber so wie ich es mir dachte.

Mit dem Einfluss drauf haben, ist es vielleicht noch etwas besser beschrieben, danke *g*

So long
Carsten
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Donnerstag 28. Februar 2008, 11:30

Naja, im Endeffekt ist es gar nicht so verschieden, wenn man an ein komplexes Programm denkt. Dort wirst Du sicherlich Klassen haben, innerhalb deren andere Instanzen erzeugt werden. Ob das nun aus einer Funktion heraus geschieht oder eben aus einer Klasse bzw einer ihrer Methoden macht imho keinen großen Unterschied :)
BlackJack

Beitragvon BlackJack » Donnerstag 28. Februar 2008, 15:00

@Zando: Zum Thema "new style"-Klassen: Properties funktionieren nur auf solchen Klassen korrekt.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder