Seite 1 von 1

Funktion via string aus Module x.y.z finden

Verfasst: Freitag 14. Februar 2014, 21:33
von Rigoletto
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

Re: Funktion via string aus Module x.y.z finden

Verfasst: Freitag 14. Februar 2014, 22:27
von Sirius3
@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.

Re: Funktion via string aus Module x.y.z finden

Verfasst: Freitag 14. Februar 2014, 23:07
von Rigoletto
@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.