2017-10-07 27 views
2

À titre d'exemple simple, dans le code suivant de 2 sous-modules (a.py et b.py dans le même répertoire). Le lien vers la même fonction de sous-module :func:`hook` fonctionne mais pas le lien renvoyant à un autre moduel, c'est-à-dire :func:`foo`. J'ai également essayé la syntaxe de :func:`.a.foo` - ne fonctionne toujours pas. Comment puis-je faire référence à a.foo()?lien de renvoi à une fonction/classe dans un sous-module différent

# script a.py 
def foo(): 
    '''foo func''' 

# script b.py 
def hook(): 
    '''hook func''' 

def spam(): 
    '''spam func. 
    :func:`foo` 
    :func:`hook` 
''' 
+0

Je pense que vous êtes proche. Essayez de jouer avec le chemin en pointillés Python. Peut-être ': func: \' a.foo \ '' ou ': func: \' parent.a.foo \ ''? –

Répondre

1

Comme décrit dans le docs:

Normalement, les noms de ces rôles sont recherchés d'abord sans autre qualification , puis avec le nom du module préfixé, puis avec le module en cours et classe nom (le cas échéant) ajouté au préalable. Si vous préfixez le nom avec un point, cet ordre est inversé.

Dans ce cas, :func:`.a.foo` signifie un objet nommé a à l'intérieur du module b. Il recherchera la fonction b.a.foo.

Vous devriez essayer :func:`..a.foo`, ce qui pointera vers b..a.foo, ou simplement a.foo (ne peut pas vérifier localement maintenant, désolé, mais je me souviens que j'utilisais cette syntaxe avant).

Mais notez que a.py & b.py devraient être les modules, c'est-à-dire importables sous leur nom. Si ce ne sont que les scripts, et ne se trouvent pas dans un paquet (pas de fichiers __init__.py jusqu'à la racine du projet), il n'y a aucun moyen de faire des références croisées avec ces rôles.

Vous pouvez essayer d'utiliser le rôle :any: - :any:`foo` - et espérer qu'il trouvera l'objet dans l'index général des objets décrits.