nutzen von erst zur laufzeit bekannten klassen und methoden
Verfasst: Montag 28. November 2011, 15:53
guten tag liebe forumsgemeinde,
ich schreibe momentan (seit gefühlten jahren) in python eine GUI für ein messgerät (unter ubuntu). mit den gelesenen messdaten sollen während der messung auch berechnungen angestellt werden können (z.b. mittelwert eines messkanals oder aktueller mittelwert über alle messkanäle usw.).
dazu hab ich mir folgendes ausgedacht:
der nutzer soll eigenhändig skripte in das unterverzeichnis "modules/calc" meines arbeitsverzeichnisses ablegen können, die jeweils eine klasse enthalten, die von meiner basisklasse "Calculation" erbt. in der basisklasse sind konstruktor und destruktor implementiert, die dafür sorgen, dass jedes erstellte element eine einzigartige ID bekommt. die unterklassen implementieren nur die methode "calc".
in der gui soll der benutzer aufgelistet bekommen, welche unterklassen (also berechnungsmethoden) verfügbar sind und diese auch wählen und benutzen können. wie schaffe ich es jetzt, ohne zu wissen, wie diese unterklassen genau heißen, sie zur laufzeit ins programm zu laden und zu benutzen?
hab schon mit globals() experimentiert in der form (className ist in dem fall gleichzeitig der dateiname der unterklasse, so komme ich an ihn ran):
das funktioniert nicht, weil die benutzerdefinierten skripte noch nicht importiert worden und in globals() nicht enthalten sind.
andere versuche waren, alle calc-Funktionen in eine Klasse zu tun und diese dann mit abzuholen.. ist mir aber nicht so lieb, weil ich jede berechnung in einer eigenen datei haben möchte.
was sind eure ideen dazu? wie kann man das problem (besser) lösen? es ist vor allem wichtig, dass die berechnungs-skripte von nutzer zu nutzer austauschbar sind.
vielen dank im voraus für die antworten!
ich schreibe momentan (seit gefühlten jahren) in python eine GUI für ein messgerät (unter ubuntu). mit den gelesenen messdaten sollen während der messung auch berechnungen angestellt werden können (z.b. mittelwert eines messkanals oder aktueller mittelwert über alle messkanäle usw.).
dazu hab ich mir folgendes ausgedacht:
der nutzer soll eigenhändig skripte in das unterverzeichnis "modules/calc" meines arbeitsverzeichnisses ablegen können, die jeweils eine klasse enthalten, die von meiner basisklasse "Calculation" erbt. in der basisklasse sind konstruktor und destruktor implementiert, die dafür sorgen, dass jedes erstellte element eine einzigartige ID bekommt. die unterklassen implementieren nur die methode "calc".
in der gui soll der benutzer aufgelistet bekommen, welche unterklassen (also berechnungsmethoden) verfügbar sind und diese auch wählen und benutzen können. wie schaffe ich es jetzt, ohne zu wissen, wie diese unterklassen genau heißen, sie zur laufzeit ins programm zu laden und zu benutzen?
hab schon mit globals() experimentiert in der form (className ist in dem fall gleichzeitig der dateiname der unterklasse, so komme ich an ihn ran):
Code: Alles auswählen
calcClass = globals()[className]
instance = calcClass()andere versuche waren, alle calc-Funktionen in eine Klasse zu tun und diese dann mit
Code: Alles auswählen
Calculation.__dict__was sind eure ideen dazu? wie kann man das problem (besser) lösen? es ist vor allem wichtig, dass die berechnungs-skripte von nutzer zu nutzer austauschbar sind.
vielen dank im voraus für die antworten!