Au cas ou vous ne l'auriez pas noté, je viens de dire que les
fonctions Python ont des attributs et que ces
attributs étaient disponibles au moment de l'exécution.
Une fonction, comme tout le reste en
Python, est un objet.
Ouvrez votre IDEPython favorite et suivez ces étapes :
Exemple 2.3. Accéder à la doc string de la fonction buildConnectionString
>>> import odbchelper>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}>>> print odbchelper.buildConnectionString(params)server=mpilgrim;uid=sa;database=master;pwd=secret>>> print odbchelper.buildConnectionString.__doc__Build a connection string from a dictionary
Returns string.
La première ligne importe le programme odbchelper comme module -- un morceau de code qui peut être utilisé interactivement ou depuis un programme Python (vous verrez des exemples de programmes Python multimodules au Chapitre 4). Une fois que vous importez un module, vous pouvez référencer chacune de ses fonctions, classes ou attributs publics. Les
modules peuvent faire cela pour accéder aux fonctionnalités offertes par d'autres modules et vous pouvez le faire dans l'IDE également. C'est un concept important et nous allons en discuter plus amplement plus tard.
Quand vous souhaitez utiliser des fonctions définies dans un
module importé, vous devez inclure le nom du module. Vous ne
pouvez donc pas dire buildConnectionString,
ce doit être
odbchelper.buildConnectionString. Si vous
avez utilisé des classes en Java, cela devrait vous sembler
vaguement familier.
Plutôt que d'appeler la fonction comme vous l'auriez attendu, nous demandons un des attributs de la fonction, __doc__.
import en Python est similaire à require en Perl. Une fois que vous importez un module
Python, vous accédez à ses fonctions avec module.function. Une fois que vous incluez un module Perl, vous accédez à ses fonctions avec module::function.
2.4.1. Le chemin de recherche d'import
Avant d'aller plus loin, je veux mentionner rapidement le chemin
de recherche de bibliothèques. Python cherche
dans plusieurs endroits lorsque vous essayez d'importer un module. Plus
précisément, il regarde dans tous les répertoires définis dans
sys.path. C'est une simple liste et vous pouvez
facilement la voir ou la modifier à l'aide des méthodes standard de
listes (nous en apprendrons plus sur les listes plus loin dans ce
chapitre).
Importer le module sys rend toutes ses fonctions et
attributs disponibles.
sys.path est une liste de répertoires qui
constitue le chemin de recherche actuel (le votre sera différent
en fonction de votre système d'exploitation, la version de
Python que vous utilisez et l'endroit
où vous l'avez installé). Python
recherchera dans ces repertoires (dans l'ordre donné) un fichier
.py portant le nom de module que vous tentez
d'importer.
En fait j'ai menti, la réalité est plus compliquée que ça
car tous les modules ne sont pas dans des fichiers
.py. Certains, comme le module sys, sont des modules intégrés, il
sont inclus dans Python lui-même. Les
modules intégrés se comportent comme des modules ordinaires, mais
leur code source Python n'est pas
disponible car il ne sont pas écrits en
Python (le module sys est écrit en
C).
Vous pouvez ajouter un nouveau répertoire au chemin de
recherche de Python en le joignant à
sys.path et Python cherchera dans ce répertoire
également lorsque vous essayez d'importer un module. Cela dure
tant que Python tourne (nous
reparlerons de append (joindre) et des autres
méthodes de listes au Chapitre 3).
2.4.2. Qu'est-ce qu'un objet ?
En Python, tout est objet et presque tout dispose d'attributs et de méthodes. Toutes les fonctions ont un attribut prédéfini __doc__ qui retourne la doc string définie dans le code source de la fonction. Le module sys est un objet qui a (entre autres choses) un attribut appelé path. Et ainsi de suite.
Reste la question : qu'est-ce qu'un objet ? Chaque langage de programmation définit le terme «objet» à sa manière. Pour certain, cela signifie que tout objet doit avoir des attributs et des méthodes, pour d'autres, cela signifie que tout les objets doivent être dérivables. En Python, la définition est plus flexible. Certains objets n'ont ni attributs ni méthodes (nous verrons cela au Chapitre 3) et tous les objets ne sont pas dérivables (voir le Chapitre 5). Mais tout est objet dans le sens où tout peut être assigné à une variable ou passé comme argument à une fonction (voir
au Chapitre 4).
Ceci est important et il ne fait aucun mal de le souligner une
derniere fois: en Python tout est
objet. Les chaînes sont des objets. Les listes sont des
objets. Les fonctions sont des objets. Même les modules sont des
objets.