2.6. Testare i moduli

I moduli in Python sono oggetti ed hanno diversi attributi utili. Potete usarli per testare i moduli dopo che li avete scritti.

Esempio 2.8. Il trucco if __name__


if __name__ == "__main__":

Qualche osservazione veloce prima di arrivare al succo del discorso. Prima di tutto le parentesi non sono richieste attorno all'espressione if. Secondo, lo statement if termina con i due punti ed è seguito da codice indentato.

Nota
Come il C, Python usa == per i confronti e = per gli assegnamenti. Al contrario del C, Python non supporta gli assegnamenti in una singola riga, così non c'è modo di assegnare per errore il valore che pensavate di comparare.

Così perché questo if particolare è un trucco? I moduli sono oggetti e tutti i moduli hanno un attributo built-in __name__. Il __name__ di un modulo dipende da come state usando il modulo. Se importate il modulo, allora __name__ è il nome del file del modulo, senza il percorso completo o l'estensione. Ma potete anche eseguire il modulo direttamente come un programma indipendente, in questo caso __name__ avrà un valore default speciale, __main__.

Esempio 2.9. Se importate il modulo __name__

>>> import odbchelper
>>> odbchelper.__name__
'odbchelper'

Sapendo ciò, potete creare una serie di test per il vostro modulo nel modulo stesso, mettendolo nello statement if. Quando eseguite il modulo direttamente, __name__ è __main__, così i test vengono eseguiti. Quando il modulo è importato, __name__ è qualcos'altro, così i test sono ignorati. Questo rende più semplice sviluppare ed eseguire il debug di nuovi moduli prima di integrarli in un programma di dimensioni maggiori.

Suggerimento
In MacPython c'è un passaggio ulteriore per far funzionare il trucco if __name__. Fate apparire le opzioni del modulo cliccando sul triangolo nero, nell'angolo in altro a destra della finestra e assicuratevi che “Esegui come __main__” sia selezionato.

Ulteriori letture