2012-11-28 11 views

risposta

3

C'è una domanda simile in this link. Ma una risposta breve: non è possibile accedere a una funzione interna da un elemento esterno.

A scopo di test, forse un'alternativa potrebbe essere quella di modificare la funzione interna per una esterna privata?

5

Non lo fai, perché non puoi.

È necessario limitare il test dell'unità alla funzione esterna oppure spostare altrove la funzione interna.

1

Ho avuto lo stesso dubbio e ho trovato un modo per ottenere test per le funzioni interne.

def outer(): 
    def inner(): 
     pass 

    if __debug__: 
     test_inner(inner) 
     # return 

def test_inner(f): 
    f() # this calls the inner function 

outer() 

Fondamentalmente è possibile inviare la funzione interna come parametro all'esterno e testarla come si desidera. Quando si chiama outer(), il test verrà eseguito e, poiché si tratta di una chiusura, manterrà qualsiasi proprietà extra dalla funzione esterna (come le variabili). Usando una lista, puoi inviare tutte le funzioni che desideri. Per ignorare l'se, una possibilità è quella di eseguire il codice così:

python -O code.py 
+0

Questa è una soluzione del caso molto speciale. Si consideri una funzione annidata all'interno di un ciclo, che accede alle variabili locali della funzione esterna (il caso d'uso più comune per le funzioni annidate, IMHO). – Alfe

Problemi correlati