[PYTHON] Obtenez le module lui-même et ajoutez des membres de manière dynamique

Utilisation

Les noms de variables peuvent être spécifiés dynamiquement, les fichiers peuvent être lus dynamiquement et des fonctions et classes peuvent être incorporées.

Exemple de code

Déclaration de variable dynamique

ham1.py


import sys

#Propre module
myself = sys.modules[__name__]

#Ajout du membre jambon (équivalent à la déclaration de la variable jambon)
myself.__dict__['ham'] = 'Ham'

#Jambon de sortie
print(ham)
#>>> Ham

Déclarer dynamiquement la fonction à partir de la liste de fichiers

ham2.py


import sys
import glob
import os.path
import importlib

#Importez à l'avance le répertoire (package d'espace de noms) qui contient le module chargé dynamiquement.
import dynamic_hams

#Obtenez votre propre module
myself = sys.modules[__name__]

seq = 0
for mods_dir in dynamic_hams.__path__:
    # dynamic_Obtenez la liste des fichiers py dans hams (pyc est omis cette fois)
    mod_paths = glob.glob(os.path.join(mods_dir, '*.py'))

    for mod_path in mod_paths:
        #Nom de fichier sans extension
        mod_name = os.path.basename(mod_path).split('.')[0]

        #Module d'importation
        # 'import dynamic_hams.ham'Équivalent à
        mod = importlib.import_module('dynamic_hams.' + mod_name)

        #S'attribuer les membres du module
        myself.__dict__['incubate'+str(seq)] = mod.incubate

        seq += 1

#La fonction d'incubation étant affectée à elle-même, elle peut être appelée à partir d'autres modules.
incubate0()
incubate1()
...

référence

Python: How to get current module object - python.todaysummary.com 31.5. Importlib - L'implémentation d'import - Documentation Python 3.4.2

Recommended Posts

Obtenez le module lui-même et ajoutez des membres de manière dynamique
Chargez dynamiquement le module.
Ajouter des lignes et du texte sur l'image
Obtenez l'adresse à partir de la latitude et de la longitude
Obtenez le titre de Yahoo News et analysez les sentiments
Comment obtenir le nom de la variable lui-même en python
[python] Récupère la liste des classes définies dans le module
Obtenez des commentaires et des abonnés avec l'API de données YouTube
[Django 2.2] Trier et obtenir la valeur de la destination de la relation