Funktion via string aus Module x.y.z finden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Rigoletto
User
Beiträge: 28
Registriert: Freitag 14. Februar 2014, 21:05

Hallo,

ich bin mir nicht sicher ob diese herangehensweise richtig ist aber sie funktioniert und ist schön einfach.
Um einen geschriebenen Editor um Funktionen aufzuwerten die wie in einem Package abgelegt sind importiere ich diese Funktionen wie folgt:

Code: Alles auswählen

import importlib
import os
import wxml

wxmlpath = os.path.abspath(wxml.__file__)
wxmldir = os.path.dirname(wxmlpath)

excdirs = ["__pycache__"]
excfiles = ["__init__.py"]

for root, dirs, files in os.walk(wxmldir):
	for exdir in excdirs:
		if exdir in dirs:
			dirs.remove(exdir)
	for exfile in excfiles:
		if exfile in files:
			files.remove(exfile)
	for d in dirs:
		m = os.path.join(root, d).replace(wxmldir, "wxml").replace(os.sep, ".")
		importlib.import_module(m)
	for f in files:
		m = os.path.join(root, f).replace(wxmldir, "wxml").replace(os.sep, ".").replace(".py", "")
		importlib.import_module(m)
Danach sind meine Funktionen geladen, z. B.:
x.func_a
x.y.func_a
x.y.z.func_a
x.y.z.func_b
x.y.z.a.func_a

Nun parse ich mit anderen Funktionen ein .cfg-File und brauche z. B. die Funktion z.func_b.
Wie komme ich nun am besten über den string "z.func_b" an die gewünschte Function?
Ich würde jetzt alles von oben mit dir(x) angefangen durchsuchen und dann die Funktion mit getattr rausfischen oder gibt es eine bessere Lösung?

Grüße
Rigoletto
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Rigoletto: Funktionen, die Du nicht brauchst, brauchst Du auch nicht importieren. Geh einfach durch Dein cfg-File und importiere direkt die Funktionen, die dort drinstehen.
Rigoletto
User
Beiträge: 28
Registriert: Freitag 14. Februar 2014, 21:05

@Sirius3: Stimmt, hätte ich auch selber drauf kommen können. Ich mach es einfach zur "Laufzeit" und merk mir die Funktionen in nem dict, damit es möglichst schnell geht.
Antworten