[Python-de] Klassen rekursiv in einem Modul instantiieren
Hartmut Goebel
h.goebel at goebel-consult.de
Mi Okt 10 03:29:19 EDT 2018
Am 09.10.2018 um 22:29 schrieb Philipp Kraus:
> Ich möchte jetzt in der __main__.py einmal rekursiv über alle *.py Dateien in algorithm durch gehen und aus jeder *.py Datei die Klasse instantiieren
Am besten wohl mit pkgutil.walk_modules. Falls es nicht rekursiv sein
soll, mit pkgutil.iter_modules.
Ungefähr so (siehe auch doc-string der Funktionen)
print([b
for a,b,c in
pkgutil.iter_modules(
mymodule.algorithm.__path__,
mymoduel.algorithm.__name__+".")])
Dabei bekommst Du natürlich auch mymodule.algorithm.algorithm. Überlege
Dir mal, ob Du den Code dieses module nicht in das Paket (alsi die
__init__.py-Datei) von mymodule.algorithm versheiben kannst. Dann sparst
Du das filtern.
Wenn Dir dieser Tipp geholfen hat, habe ich eine Bitte: Probiere aus, ob
das auch noch funktioniert, wenn Du Dein Programm mit PyInstlaller
packetiert hast. (Hierzu musst Du wohl erstmal alle Sub-Module als
--hidden-import angeben, oder einen zwei-Zeiler "hook" schreiben.)
Schick mir dann bitte eine Nachricht oder mache auf Github einen
Bug-Report auf. Herzlichen Dank!
--
Schönen Gruß
Hartmut Goebel
Dipl.-Informatiker (univ), CISSP, CSSLP, ISO 27001 Lead Implementer
Information Security Management, Security Governance, Secure Software
Development
Goebel Consult, Landshut
http://www.goebel-consult.de
Blog:
https://www.goe-con.de/blog/nicht-pgp-ist-gescheitert-die-entwickler-haben-versagt
Kolumne:
https://www.goe-con.de/hartmut-goebel/cissp-gefluester/2011-08-horrorszenario-bring-your-own-device
Mehr Informationen über die Mailingliste python-de