Wenn ich ein Modul Modul mit einem entsprechenden Verzeichnis von module/
definieren, kann ich dynamisch Klassen von Kindermodulen wie a.py
oder b.py
laden?Wie laden Sie Python-Klassen dynamisch aus einem bestimmten Verzeichnis?
--module
----a.py
----b.py
Dies erfordert den Klassennamen zu suchen wissen? Kann ich eine Basisklasse einrichten, die diese Kinder irgendwie lädt?
Der grundlegende Anwendungsfall besteht darin, einem Benutzer das Schreiben eines eigenen Codes zu ermöglichen, in den das Programm geladen wird. Dasselbe wie Rails Ihnen ermöglicht, Ihre eigenen Controller, Ansichten und Modelle in bestimmten Verzeichnissen zu schreiben.
Der Code für das Laden von Modulen dynamisch habe ich so weit ist
def load(folder):
files = {}
for filename in os.listdir(folder):
if (filename[0] != '_' and filename[0] != '.'):
files[filename.rstrip('.pyc')] = None
# Append each module to the return list of modules
modules = []
mod = __import__(folder, fromlist=files.keys())
for key in files.keys():
modules.append(getattr(mod, key))
return modules
Ich hatte gehofft, es zu ändern Klassenobjekte zurückzukehren.
Wenn Sie andere überprüfen [SE Fragen] (http://stackoverflow.com/questions/193161/Was ist die beste Projekt-Struktur für eine Python-Anwendung?) über Python-Module Datenstruktur, die dritte Antwort geben eine ziemlich gute kurze Antwort. Ich schätze, als könnte man etwas tun wie: 'von Modul Import a 'dynamisch. – Zenon