17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

138<br />

Éléments du langage<br />

DEUXIÈME PARTIE<br />

|- interface<br />

| | __init__.py<br />

| | fiche_client.py<br />

| | liste_clients.py<br />

|- bdd<br />

| | __init__.py<br />

| | acces_bd.py<br />

| | acces_pgsql.py<br />

|- stats<br />

| | __init__.py<br />

| | frequence.py<br />

Chaque répertoire faisant partie du paquet doit posséder un fichier __init__.py<br />

pour que l’interpréteur le prenne en compte. Ce fichier peut être vide ou contenir du<br />

code d’initialisation qui est exécuté dès que le répertoire est trouvé dans une directive<br />

d’importation. Il représente le répertoire dans le contexte d’exécution.<br />

Exemples d’utilisation du paquet :<br />

from FichierClient import description : charge les modules __init__ et<br />

description du répertoire FichierClient.<br />

from FichierClient.noyau import application : charge les modules __init__<br />

des répertoires FichierClient et noyau, et le module application.<br />

Dans le module frequence.py : l’importation relative from ..bdd import<br />

acces_db permet d’atteindre le module acces_db.<br />

Import * et __all__<br />

Lorsqu’un paquet est mis en place, l’interpréteur parcourt automatiquement les<br />

répertoires contenant un fichier __init__.py à la recherche de fichiers Python. Le<br />

résultat de cette recherche peut varier d’un système à l’autre. Sur un système<br />

MS-Windows ou Macintosh, les noms de fichiers récupérés peuvent avoir une casse<br />

qui varie et un fichier python dont le nom contient des majuscules ne sera pas forcément<br />

importé de la même manière.<br />

Pour éviter ce problème, lorsqu’un appel à from Paquet import * est fait, l’interpréteur<br />

n’importe que les éléments trouvés dans le fichier __init__.py du répertoire. La<br />

seule possibilité pour importer tous les modules du répertoire est de les définir explicitement<br />

dans une variable globale __all__ dans le fichier __init__.py du répertoire.<br />

Ainsi le fichier __init__.py du répertoire interface contiendra :<br />

__all__ = ['fiche_client', 'liste_clients']

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!