[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