[PYTHON] Holen Sie sich das Modul selbst und fügen Sie Mitglieder dynamisch hinzu

Verwenden

Variablennamen können dynamisch angegeben, Dateien dynamisch gelesen und Funktionen und Klassen integriert werden.

Codebeispiel

Dynamische Variablendeklaration

ham1.py


import sys

#Eigenes Modul
myself = sys.modules[__name__]

#Hinzufügung von Mitgliedsschinken (entspricht der Deklaration der Schinkenvariablen)
myself.__dict__['ham'] = 'Ham'

#Schinken ausgeben
print(ham)
#>>> Ham

Deklarieren Sie die Funktion dynamisch aus der Dateiliste

ham2.py


import sys
import glob
import os.path
import importlib

#Importieren Sie vorab das Verzeichnis (Namespace-Paket), das das dynamisch geladene Modul enthält.
import dynamic_hams

#Holen Sie sich Ihr eigenes Modul
myself = sys.modules[__name__]

seq = 0
for mods_dir in dynamic_hams.__path__:
    # dynamic_Holen Sie sich die Liste der py-Dateien in Schinken (pyc wird dieses Mal weggelassen)
    mod_paths = glob.glob(os.path.join(mods_dir, '*.py'))

    for mod_path in mod_paths:
        #Dateiname ohne Erweiterung
        mod_name = os.path.basename(mod_path).split('.')[0]

        #Modul importieren
        # 'import dynamic_hams.ham'Gleichwertig
        mod = importlib.import_module('dynamic_hams.' + mod_name)

        #Weisen Sie sich Modulmitglieder zu
        myself.__dict__['incubate'+str(seq)] = mod.incubate

        seq += 1

#Da die Inkubationsfunktion sich selbst zugewiesen ist, kann sie von anderen Modulen aufgerufen werden.
incubate0()
incubate1()
...

Referenz

Python: How to get current module object - python.todaysummary.com 31.5. Importlib - Die Implementierung von Import - Python 3.4.2 Dokumentation

Recommended Posts

Holen Sie sich das Modul selbst und fügen Sie Mitglieder dynamisch hinzu
Laden Sie das Modul dynamisch.
Fügen Sie dem Bild Linien und Text hinzu
Holen Sie sich die Adresse von Längen- und Breitengrad
Holen Sie sich den Titel der Yahoo News und analysieren Sie die Stimmung
So erhalten Sie den Variablennamen selbst in Python
[Python] Ruft die Liste der im Modul definierten Klassen ab
Erhalten Sie Kommentare und Abonnenten mit der YouTube-Daten-API
[Django 2.2] Sortieren und erhalten Sie den Wert des Beziehungsziels