Seite 1 von 1

Schnittstelle

Verfasst: Donnerstag 27. Dezember 2007, 13:03
von tomate
Hallo,
ich hab einen Algorithmus, der über eine Benutzeroberfläche (wxPython) gestartet werden kann. Ungefähr so

Code: Alles auswählen

                        algo1 = Algo(data)  

                        start_new_thread(algo1.run, ())
Ich würde dem Benutzer gerne verschiedene andere Algorithmen zum Vergleich anbieten. Gibt es eine schöne Möglichkeit, den Code so zu gestalten, dass problemlos neue Algorithmen hinzugefügt werden können?

Ich bin ziemlich sicher, dass es sowas schon im Forum gibt. Hat vielleicht jemand einen Tipp nach was ich suchen könnte? (Interface?)

Danke und Gruß

Verfasst: Donnerstag 27. Dezember 2007, 15:58
von Leonidas
Such mal nach Plugin-System. Du kannst dir auch den Code von "What's On Air" angucken, dort wird ein sehr simples Plugin-System implementiert.

Verfasst: Donnerstag 27. Dezember 2007, 17:08
von tomate
Ok, Danke.

Es muss aber nicht mal ein Plugin sein. Ich will mir damit einfach selber die Arbeit ersparen, falls ich später nochmal was hinzufügen möchte.

Verfasst: Donnerstag 27. Dezember 2007, 19:46
von veers
In Python musst du keine Interfaces schreiben - das ist auf Grund des Ducktypings überflüssig. Was ich teilweise mache ich eine Default Implementierung zur Dokumentation zu schreiben.

Verfasst: Freitag 28. Dezember 2007, 12:13
von sma
tomate, die einzige Bedingung, die an ein Ding, welches anstelle von "algo1" stehen kannst, deinem Beispiel nach gestellt wird, ist, eine Methode "run()" zu haben. Damit hast du dein Interface identifiziert und formaler wird's in Python nicht.

Wenn du willst, kannst du dir ja die folgenden Klasse definieren und verlangen, dass jeder, der mitspielen möchte, von dieser Klasse erbt. Halte ich aber außer aus erzieherischen Gründen (und zur expliziten Dokumentation) für unnötig ;)

Code: Alles auswählen

class IAlgo(object):
    def run(self):
    raise Exception("implementing classes must override this method")
PS: Einige Python-Anwendungen wie z.B. Zope formalisieren ein ähnliches Vorgehen da explizite Schnittstellenbeschreibungen schon einen Wert haben.

Stefan

Verfasst: Freitag 28. Dezember 2007, 22:50
von tomate
Danke für die Antworten