2010-11-01 2 views
0

Supposons que j'ai ci-dessous la structure de fichier python:collecte automatique des informations dans sub_modules lors de l'importation en python?

\function_group 
    |-__init__.py 
    |-sub_function1 
    |----|__init__.py 
    |----|sub_sub_func1.py 
    |----|sub_sub_func2.py 
    |----|sub_sub_func3.py 
    |-sub_function2 
    |----|__init__.py 
    |----|sub_sub_func1.py 
    |----|sub_sub_func2.py 
    |----|sub_sub_func3.py 

Dans chaque sub_sub_funcX.py il y a une fonction de liste recueilleront tous les noms de fonction en elle-même sub_sub_funcX.py,

# sub_sub_funcX.py 
# and each sub_sub_funcX.py file has similiar code 

import inspect 
functions = inspect.getmembers(self?, inspect.isfunction) # how to write the "self" here 

def bar(x, y): 
    return x * y 

def bar1(x, y): 
    return x + y 

Mes questions sont

  1. sur le code ci-dessus marqué "# how", quelle est la bonne expression pour le point de soi? Est-ce que ce devrait être un "sub_sub_funcX"? Comment puis-je obtenir une liste complète de toutes ces [fonctions] lors de l'importation du module du haut function_group?

  2. ? Je veux dire est-il possible que chaque module de sous-fonction puisse rapporter en haut sa liste de fonctions dans une certaine mesure lors de l'importation?

  3. est-il un moyen que je peux facilement étendre les modules sans ajouter de code d'entretien dans __init__ juste un facile à accrocher et facile à enlever? par exemple, je change la structure comme plus tard:

\function_group 
    |-__init__.py 
    |-sub_function1 
    |----|__init__.py 
    |----|sub_sub_func1.py 
    |----|sub_sub_func2.py 
    |----|sub_sub_func3.py 
    |-sub_function2 
    |----|__init__.py 
    |----|sub_sub_func1.py 
    |----|sub_sub_func2.py 
    |----|sub_sub_func3.py 
    |----|sub_sub_func4.py   # new added 
    |-sub_function3     # new added  
    |----|__init__.py     # new added 
    |----|sub_sub_func1.py   # new added 

    |----|sub_sub_sub_function_31  # new sub added  
    |--------|__init__.py    # new added 
    |--------|sub_sub_sub_sub_func1.py# new added 
+0

-1: Pourquoi ne pas utiliser la fonction sphinx '..autodoc'? Cela ne serait-il pas plus simple? –

Répondre

1

1: Vous devez

import inspect 
import sys 
inspect.getmembers(sys.modules[__name__], inspect.isfunction) 

2: La meilleure réponse que je peux penser est d'importer les sous-modules, et inspectez-les au plus haut niveau.

  1. Non, il incombe au module de niveau supérieur (celui qui est importé) de faire ce qu'il doit faire. Vous ne pouvez pas importer le package supérieur et attendre que les sous-packages fassent leur travail, sauf s'ils sont importés dans le package supérieur. Et puisque vous ne voulez pas modifier votre init .py de haut niveau, cela ne va pas se produire. Pouvez-vous nous dire exactement ce que vous essayez de faire avec ces fonctions?

J'ai l'impression que a être une meilleure façon que cette introspection beaucoup.

+0

Merci sykora, pour expliquer mon problème aussi simple, c'est une sorte de "algorithme de filtrage" manuel. Par exemple, j'ai une liste de numéros de certains périphériques, disons [1234567] et la source d'entrée pour cela est [1,2,4], quelle est la relation pour eux? 'f (1,2,4) = 1234567'? J'utilise dropdown way (fliter), type homme mis l'algorithme possible laisse les fonctions (combinaisons) pour tester la possiblité de l'algorithme connu f (1234567) = [1,2,4] ', c'est pourquoi j'ai besoin de fonctions hookables ici. et pourquoi pas un algorithme génétique? parce que j'ai trop peu d'échantillons de sortie. et, ce n'est pas pour la fissure de pwd :-) – user478514

+0

et, pensez-vous que je peux définir une fonction d'inspection commune alors je peux l'invoquer au niveau supérieur lors de l'importation? alors il va invoquer la même fonction de nom/objectif définie dans son sous-module? – user478514

Questions connexes