Besuchermuster in Python

8

Hier ist eine vereinfachte Implementierung des Besuchermusters in C ++. Ist es möglich, so etwas in Python zu implementieren?

Ich brauche es, weil ich Objekte von C ++ - Code an eine Funktion in Python übergeben werde. Meine Idee war, einen Besucher in Python zu implementieren, um den Typ des Objekts herauszufinden.

Mein C ++ Code:

%Vor%     
bogdan 17.09.2014, 13:14
quelle

3 Antworten

12

Das Besuchermuster kann in Python implementiert werden, ich benutze es, um eine saubere Schnittstelle zwischen meinen Daten und der Präsentationsebene zu implementieren. Die Datenschicht kann die Reihenfolge der Daten bestimmen. und die Präsentationsschicht druckt / formatiert sie einfach:

In meinem Datenmodul habe ich:

%Vor%

Alle meine Datenklassen erben von dieser besuchten Klasse und die besuchte Klasse legt auch einige einfache Funktionen für Basisdaten offen, die alle meine Objekte benötigen, z.B. Name, Parent usw. und Methoden zur Verwaltung der Child-Liste - die durch die oben verwendete Methode children() verfügbar gemacht wird. Jede der Unterklassen erstellt ihre eigenen Daten, hat ihre eigenen Eigenschaften und vielleicht sogar ihre eigene Kindklasse - die in die Kinderliste aufgenommen wird, die von der besuchten Superklasse gepflegt wird.

Meine Besucherklasse ist so:

%Vor%

_find_data_instance ist ein Code, der eine Instanz einer meiner Dateninstanzen erstellt oder findet. In meinem Fall haben alle meine Datenklassen einen Konstruktor, der ein objectId akzeptiert und zurückgibt, und das Besucherobjekt weiß, welche Datenklasse zu verwenden ist.

    
Tony Suffolk 66 17.09.2014, 15:54
quelle
8

Sie können Dekoratoren verwenden, um zu bekommen, was Sie wollen. Kopieren eines Beispiels aus diesem Blog :

%Vor%

und der Code für den @visitor Dekorator (falls der Link nicht mehr funktioniert):

%Vor%

Verwandter Blog (der erste scheint bereits down zu sein): Ссылка

BEARBEITEN:

obj.__qualname__ ist nicht verfügbar bis Python 3.3, daher müssen wir einen Hack für niedrigere Versionen verwenden: -

%Vor%

Leider funktioniert die obige Lösung nicht für Python-Versionen unter 3.3, da Methoden immer noch normale Funktionen sind, wenn sie an einen Dekorator übergeben werden. Sie können versuchen, sowohl einen Klassen- als auch einen Methoden-Decorator zu verwenden, siehe Kann ein Python-Decorator einer Instanzmethode auf die Klasse zugreifen? .

    
Joren Van Severen 08.02.2015 20:18
quelle
3

Sie könnten das in Python implementieren, aber das ist wirklich nicht nötig. Python ist eine dynamische, interpretierte Sprache, was bedeutet, dass Typinformationen zur Laufzeit leicht verfügbar sind.

So könnte Ihr Beispiel so einfach sein wie

%Vor%

was ergeben wird:

%Vor%     
trvrm 17.09.2014 13:26
quelle

Tags und Links