Klassen erzeugen mit String/Variable
Verfasst: Montag 14. November 2016, 10:20
Hallo,
ich stehe vor folgendem Problem und finde im Netz auch keine Lösung die Funktioniert. vielleicht hat hier jemand eine Lösung. Ich suche nache einer möglichkeit Klassen nicht anhand eines Namens zu erzeugen sondern anhand eines Strings (aus einer Variable). Hintergrund ist ein Config file wo div. Module aktiviert bzw deaktiviert werden. Eine Lösung währe :
File Struktur:
etc : konfig Files
gateway -> onewire: ds1820.py, hm_server.py
main.py
Klassen:
ds1820.py:
class server:
def __init__(self,args):
...mach was
hm_server.py:
class server:
dev __init__(self,args):
... mach auch was
main.py:
Soweit geht das, aber immer wenn ein neues Modul dazukommt müste ich den main.py Code entsprechend anpassen, und die Else IF Tabelle erweitern... sehr unschön. Das Laden der Module kann über die import * Funktion und der __init__.py schon mal automatisch erfolgen, auch wenn das vorgehen dazu sehr umstritten ist.
Ich würde gerne die Klassen anhand eines Config Files erzeugen. Ca so:
Es sind hir natürlich noch einige Prüfungen zu machen wie:
ist das Modul/Klasse importiert
wurde die Klasse erzeugt
...
ich stehe vor folgendem Problem und finde im Netz auch keine Lösung die Funktioniert. vielleicht hat hier jemand eine Lösung. Ich suche nache einer möglichkeit Klassen nicht anhand eines Namens zu erzeugen sondern anhand eines Strings (aus einer Variable). Hintergrund ist ein Config file wo div. Module aktiviert bzw deaktiviert werden. Eine Lösung währe :
File Struktur:
etc : konfig Files
gateway -> onewire: ds1820.py, hm_server.py
main.py
Klassen:
ds1820.py:
class server:
def __init__(self,args):
...mach was
hm_server.py:
class server:
dev __init__(self,args):
... mach auch was
main.py:
Code: Alles auswählen
from gateways.onewire import * #in der __init__.py werden alle verfügbaren module gepflegt als beispiel __all__ = ['ds1820', 'hm_server']
modul="ds1820"
if modul=="ds1820":
modul_ds1820=ds1820.server("Argumente")
elseif modul=="hm_server":
modul_hm_server=hm_server.server("Argumente)
else:
print ("sorry unkown modul")
....
Ich würde gerne die Klassen anhand eines Config Files erzeugen. Ca so:
Code: Alles auswählen
from gateways.onewire import *
modul_to_load=["ds1820","hm_server"]
load_modul={}
for modul_name in modul_to_load:
load_modul{modul_name}=modul_name.server(args)
...
load_modul{'ds18201'}.machwas()
ist das Modul/Klasse importiert
wurde die Klasse erzeugt
...