UKOnline

Module

Terminons ce chapitre en voyant comment définir ses propres modules. On a déjà vu comment importer un module et en utiliser les fonctions dans les chapitres précédents, en particulier à la section 3.4, où on a découvert le module turtle.

L'intérêt d'un module est de pouvoir y définir des fonctions que l'on va facilement pouvoir réutiliser dans d'autres programmes, ou dans d'autres modules. L'un des buts d'une fonction étant d'être réutilisée, il est dès lors important d'avoir une structure telle que le module dans un langage de programmation.

Utilisation d'un module

Revoyons rapidement comment utiliser un module. La première chose à faire consiste à importer le module grâce au mot réservé import. On peut importer un module complètement ou uniquement en importer certaines fonctions. Dans le premier cas, il faudra préfixer chaque appel de fonction par le nom du module duquel elle provient. On peut par exemple écrire le programme suivant :

L'autre solution importe directement des fonctions depuis des modules et on peut ainsi les appeler directement, juste avec leur nom. Le programme précédent peut se réécrire comme suit :

Comme on l'a déjà vu, on peut ne pas lister explicitement toutes les fonctions à importer et simplement écrire from turtle import *. Si on fait cela, il faudra faire attention aux conflits de noms, c'est-à-dire si plusieurs modules importés contiennent des fonctions portant le même nom. De manière générale, on essaie dès lors d'éviter d'importer *, sauf lorsqu'on est certain qu'aucun conflit de noms peut se produire. Si vous n'importez, par exemple, qu'un seul module, cela ne pose aucun soucis.

Définition d'un module

La définition d'un module est très facile en Python, il suffit essentiellement de créer un fichier .py contenant des définitions de fonctions. Un module peut évidemment lui-même importer d'autres modules.

Créons par exemple un module shapes contenant des fonctions pour dessiner des formes à l'aide d'une tortue. Le listing de la figure 4 montre le code de ce module. On peut y voir une fonction polygon qui permet de dessiner des polygones réguliers et une fonction square pour dessiner des carrés. Dans les deux cas, on peut spécifier la longueur des côtés et la couleur du trait (noir par défaut). Pour les polygones, on doit en plus préciser le nombre de côtés voulu.

Le fichier shapes.py contient un module reprenant des fonctions pour dessiner des formes complexes à l'aide d'une tortue.

Ce fichier, étant enregistré sous le nom shapes.py, définit un module shapes dont on peut importer les fonctions. Par exemple, pour dessiner trois polygones de couleurs différentes en utilisant ce module, il suffit d'écrire le programme suivant :

Afin que Python puisse retrouver les différents modules existants, on ne peut pas les placer n'importe où sur sa machine. On ne va pas ici rentrer dans les détails techniques de où l'interpréteur Python cherche les modules, le plus facile étant de placer le fichier du module dans le même dossier que le fichier de votre script.

Documentation

Comme on a pu le voir précédemment, il est important d'ajouter un commentaire explicatif pour chaque fonction, afin de savoir ce qu'elle fait et comment l'utiliser. C'est évidemment encore plus important dans le cadre d'un module puisque le but est qu'il soit réutilisé par vous-même ou par d'autres programmeurs.

Pour cela, on va utiliser une forme spéciale de commentaires qui permettra d'automatiquement générer la documentation d'un module Python, appelée Docstring (PEP 0257). Le principe consiste à déclarer un littéral de type chaine de caractères comme première instruction du corps de la fonction documentée. Par convention, on délimite les littéraux avec des triples guillemets doubles, qui permettent d'écrire la chaine de caractères sur plusieurs lignes.

Voici deux exemples, dont un avec une documentation sur une seule ligne et l'autre avec une documentation sur plusieurs lignes :