[Python] La matrice immortale.
Giovanni Porcari
giovanni.porcari a softwell.it
Mar 1 Lug 2014 18:15:42 CEST
> Il giorno 01/lug/2014, alle ore 15:37, Gabriele Battaglia <iz4apu a libero.it> ha scritto:
>
> Ciao Giovanni e grazie.
> Visto che in questi giorni, data la mia presenza, questa lista è diventata un asilo per programmatori... Dove l'infante sono io, chiaramente, mi spiegheresti il significato di questa riga?
>
> if __name__=='__main__':
>
> Faccio qualche domanda per capire, correggimi.
> __name__ è l'atributo di che cosa? Assume "__main__" quando ci si trova in console? Che altri valori potrebbe avere? Perchè istanzi degli oggetti della tua classe, solo se __name__ è = a __main__?
>
> GB.
L'idea è che se scrivi un programma in linea di massima parti da un'idea
e poi ti lasci guidare dall'intelligenza, dall'iniziativa e dalla tua
voglia di sperimentare. Se ami pensare in grande il fatto di avere
una classe Scacchiera ti consente di avere più istanze di Scacchiera
e un domani di gestire in contemporanea un torneo con tante scacchiere.
Un domani scriverai un codice bellissimo per gestire tornei e scriverai
"from scacchi import Scacchiera"
e poi instanzierai tante scacchiere quanti sono i tavoli e farai un grande
programma. Oppure butterai via subito tutto.
Ma il punto è che quando scrivi Scacchiera non hai ancora nulla di pronto
per testarla e quindi subentra il 'trucco' if __name__='__main__':
Questo ti consente da terminale di scrivere python scacchi.py
(dove scacchi.py è il nome del modulo).
Quando il programma va in esecuzione vengono eseguite tutte le istruzione
non indentate e quindi anche la famigerata "if __name__".
Se tu lanci il modulo scacchi da terminale allora il suo nome è "__main__"
e quindi vengono eseguite le istruzione che sono comprese in questa if.
In pratica sotto la if ci finisce un main provvisorio di test della tua classe.
E perchè ci mettiamo la 'if' ?
Perchè poi nel modulo torneo.py dove importerai scacchi.py , al momento
di importare vengono eseguite tutte le istruzioni non indentate e quindi anche
la famosa 'if'. Però in questo caso (per nostra fortuna) __name__ non vale __main__
e quindi la if non viene eseguita.
Sono certo che su questa lista ci siano mille persone più brave di me a spiegartelo
ma nel caso non ci fossero volontari ho fatto del mio meglio ;)
Ciao
G
Maggiori informazioni sulla lista
Python