Python OOP - Klassenbeziehungen

8

Angenommen, ich habe ein System von drei Klassen. Die GameClass erstellt bei der Initialisierung Instanzen beider anderen Klassen.

%Vor%

Was wäre der beste Weg auf AnswerAQuestion() in FieldClass von der Instanz von PlayerClass aus zuzugreifen?

  • Muss ich einen Verweis auf die FieldClass -Instanz an PlayerClass ?
  • übergeben?
  • Gibt es einen anderen, besseren Weg, dies zu lösen? Durch das obige Vorgehen müsste ich eine zusätzliche Variable in PlayerClass einfügen, um die FieldClass -Instanz zu halten.
  • Gibt es eine völlig andere Art, Klassenbeziehungen in Python zu verwalten?
lamas 24.02.2010, 17:35
quelle

4 Antworten

6

Ich würde mit Dependency Injection gehen: instanziieren Sie einen GameClass mit dem erforderlichen FieldClass und PlayerClass in der Konstruktor-Aufruf usw. (dh statt die abhängigen Objekte aus GameClass zu erzeugen, wie Sie es gerade tun).

%Vor%

Mit DI können Sie nach Abschluss der Einrichtungsphase leicht auf die benötigten Mitglieder zugreifen.

    
jldupont 24.02.2010, 17:41
quelle
4

Um Ihre Klassenbeziehungen besser zu verstehen, müssen Sie uns mehr über Ihr Projekt und das, was Sie erreichen wollen, erzählen.

Eine Möglichkeit, die -Instanz von FieldClass von PlayerClass in Ihrem Beispiel zu referenzieren, besteht darin, die GameClass -Instanz an die PlayerClass -Instanz zu übergeben:

%Vor%

Eine andere Möglichkeit besteht darin, die Variable field

zu übergeben %Vor%

Als Randnotiz: Sie verwenden ein spezielles Benennungsschema. Ich schlage das vor:

%Vor%

Ich schlage vor, dass Sie den Python-Stil-Leitfaden lesen, bevor Sie sich schlechte Angewohnheiten zulegen.

    
Otto Allmendinger 24.02.2010 17:44
quelle
1

Sie könnten den untergeordneten Objekten den Kontext bereitstellen, d. h.

%Vor%

Da die Objekte ihren Kontext kennen, können sie hineingreifen und auf andere Objekte im selben Kontext zugreifen.

    
Geoff Reedy 24.02.2010 17:47
quelle
0

Ich würde etwas wie das Folgende tun, bei dem Sie Game in eine Rückwärtsreferenz übergeben, die Ihnen den Zugriff auf die anderen zugeordneten Klassen ermöglicht. Auf diese Weise könntest du dieser Player-Instanz optional eine direkte Beziehung zum Feld geben.

%Vor%

Eine Randnotiz ist, dass es jetzt eine gute Übung ist, dass alle Ihre Klassen von object erben, anstatt dass sie alleine stehen.

    
Mike Trpcic 24.02.2010 17:46
quelle

Tags und Links