Cours Python : types, structures de contrôles, Données et Variables

SOMMAIRE
Introduction ..27
1 Présentation .29
1.1 Langages compilés et interprétés ..30 1.2 Le langage PYTHON en bref ..31
2 La Programmation Orientée Objet .33
2.1 Définition 34 2.2 Les objets par l'exemple ..35
2.2.1 Les classes 35
2.2.2 Les propriétés .35
2.2.3 Les méthodes .36
2.2.4 En bref ..36
2.3 L'encapsulation ..37 2.4 L’héritage 38
3 Le langage PYTHON 41
3.1 Les types de données 42
3.3.1 Booléens .42
3.3.2 Integer ..42
3.3.3 Long ..42
3.3.4 Float ..43
3.3.5 String .43
3.3.5.1 Méthodes 44
3.3.6 Liste 46
3.3.6.1 Méthodes 47
3.3.7 Dictionnaire ..47
3.3.7.1 Méthodes 48
3.3.8 Tuple .48
3.2 Le transtypage 49
3.2.1 Transtypage de type 49
3.2.2 Transtypage de format ..49
4.7.3 Détection de la plateforme d'exécution ..50
3.4 La portée des variables .51 3.4 Quelques fonctions prédéfinies ..52
3.4.1 PRINT 52
3.4.2 LEN .52
3.4.3 TYPE ..52
3.4.4 INPUT 53
3.4.5 GETPASS 53
3.5 Le caractère de césure ..54 3.6 Le caractère de commentaire 55 3.7 Les opérateurs 56 3.8 Les tests conditionnels .57
3.8.1 IF, ELIF, ELSE ..57
3.9 Les boucles ..58
3.4.1 FOR 58
3.4.2 WHILE ..59
3.4.3 Break et continue ..59
3.10 PYTHON et les fichiers 60
3.10.1 Chemin absolu et chemin relatif .60
3.10.2 Ouverture d'un fichier .60
3.10.3 Fermeture d'un fichier .61
3.10.4 Lecture ..61
3.10.5 Écriture .63
3.11 La POO PYTHON .64
3.11.1 PYTHON et les principes de la POO .64
3.4.3.1 L'encapsulation 64 3.11.1.2 L'héritage .64
3.11.2 La modularité avec PYTHON ..64
3.11.2.1 L'instruction import ..64
3.11.2.2 L'instruction SELF .65
3.11.2.3 Les fonctions et les procédures 65
3.11.2.4 Les classes .66
3.4.3.1.1 Les attributs ..67
3.4.3.1.2 Les accesseurs ..68
3.4.3.1.3 Les mutateurs ..68
3.4.3.1.4 Mise en situation 68
3.11.2.5 Les modules ..70
3.11.2.6 Les packages 71
3.11.2.6.1 Composition d'un package ..71 3.11.2.7 En résumé 71
3.11.3 Stockage d'objet dans des fichiers 73
3.11.3.1 Lecture ..73 3.11.3.2 Enregistrement .73
3.12 Les expressions régulières ..74
3.12.1 Le module re .75
3.12.1.1 Search 75
3.12.1.2 Sub 76
3.13 Les exceptions .77 3.14 Les mots réservés .79 3.15 Convention de programmation .80
3.15.1 La PEP20 ..80
3.15.2 La PEP8 .81
3.15.3 Règles de codage ..81
3.15.3.1 Les variables .82
3.15.3.2 Les fonctions/procédures .82
3.15.3.3 Les modules et packages .82
3.15.3.4 Les classes .82
3.15.3.4.1 Le nom des classes .82
3.15.3.4.2 Les propriétés et les méthodes 82
3.15.3.5 Les exceptions .82
3.15.3.6 Les DocStrings .83
3.15.3.7 Début de code 83
3.15.3.8 Sortie de code 84
3.15.3.9 Autre 84 3.15.3.10 En plus 85
3.15.4 Bonne structure type d'un programme 86
3.15.4.1 La mise en page ..87 3.15.4.2 Les règles 87
4 Modules Complémentaires .89
4.1 Pypi 90 4.2 Le temps .91
4.2.1 Le timestamp ..91
4.2.2 Date complète .91
4.2.3 La mise en sommeil 92
4.3 Les mathématiques .93
4.3.1 Le module de base ..93
4.3.2 Le module NumPY 93
4.3.2.1 Tableaux multidimensionnels 94
4.3.2.2 Manipulation sur les tableaux 94
4.3.2.2.1 Ajout .94
4.3.2.2.2 Modification .95
4.3.2.2.3 SUPPRESSION ..96
4.3.2.2.4 COPIE ..96
4.3.2.3 Transposition ..96
4.3.2.4 Méthodes associées aux tableaux .97
4.3.2.5 Calcul sur tableau .97 4.3.2.6 En plus .98
4.4 Imagerie ..99
4.4.1 Ouverture d'une image ..99
4.4.2 Création d'une image .99
4.4.3 Modification d'une image .100
4.4.4 Sauvegarde d'une image ..100
4.4.5 Affichage d'une image 100
4.4.6 Connaître les composantes d'un pixel 101
4.4.7 Conversion en gris 101
4.4.8 Exemple 101
4.5 Les graphiques avec Matplotlib .103
4.5.1 Création d'une courbe .103
4.5.1.1 Le conteneur ..103
4.5.1.2 Ajout d'une courbe .104
4.5.2 Paramétrage complémentaire 106
4.5.2.1 Axes .106
4.5.2.2 Légende de la courbe ..106
4.5.2.3 Labels .106
4.5.2.4 Grille ..107
4.5.2.5 Utilisation de date en X ou Y 107
4.5.2.6 Image de fond 108
4.5.2.7 Effacement de la courbe 108 4.5.2.8 Transformer un graphique en image .108
4.5.3 Exemple 109
4.6 Les bases de données .111
4.6.1 Présentation rapide ..111
4.6.1.1 Composants 111 4.6.1.2 Fonctionnement générique ..112
4.6.2 PYSQLITE 113
4.6.2.1 Connexion 113
4.6.2.2 Exécuter une requête 114
4.6.2.2.1 Curseur .114
4.6.2.2.2 Récupération des résultats .114
4.6.2.3 Sauvegarde .116 4.6.2.4 Déconnexion ..116
4.6.3 PSYCOPG 116
4.6.3.1 Connexion 116
4.6.3.2 Exécuter une requête 117
4.6.3.2.1 Curseur .117
4.6.3.2.2 Récupération des résultats .117
4.6.3.2.3 Lecture de la dernière requête exécutée 118
4.6.3.2.4 Procédures .118
4.6.3.2.5 Gestion d'erreurs 118
4.6.3.3 Sauvegarde .119 4.6.3.4 Déconnexion ..119
4.7 Le module OS 120
4.7.1 Taille d'un fichier 120
4.7.2 Renommage d'un fichier 120
4.8 Scripting ..121
4.8.1 Les arguments 121
4.8.1.1 Passage d'argument .121 4.8.1.2 Tester le nombre d'argument .122
4.8.2 L’exécution de commande ..122
4.8.3 Exemple 122
4.9 Les fichiers Zip 124
4.9.1 Création/modification d'un ZIP .124
4.9.2 Ouverture d'un ZIP .125
4.9.2.1.1 Ouverture et accès aux données .125 4.9.2.1.2 Décompression complète 126
4.10 Le XML 127
4.10.1 Codage 127
4.10.1.1 L'entête 127
4.10.1.2 Le corps .128
4.10.1.3 Exemple ..128
4.10.2 Les principes de base ..129
4.10.2.1 Les commentaires ..129
4.10.2.2 La racine et les nœuds .129
4.10.2.3 Les balises 129
4.10.2.4 Chevauchement .130
4.10.2.5 Les attributs .130
4.10.2.6 Les instructions de traitement .130
4.10.2.7 Le XPATH ..131
4.10.2.7.1 Sélection d'un nœud précis ..131
4.10.2.7.2 Sélection avec attributs ..132
4.10.2.7.3 Récupérer toutes les données d'un nœud .132
4.10.2.7.4 Combinaison de XPATH .132 4.10.2.7.5 En bref 133
4.10.3 Le module LXML ..133
4.10.3.1 Utilisation de LXML .133
4.10.3.2 Création d'un fichier XML 134
4.10.3.3 Lecture d'un fichier XML .135
4.10.3.4 Modification d'un fichier XML ..136
4.10.3.4.1 Serialisation et deserialisation ..136 4.10.3.4.2 Méthode générale 136
4.11 L'Open Document Format ..138
4.11.1 Historique .138
4.11.2 Les différents types de documents .138
4.11.3 Les templates .139
4.11.4 Description du format ODF ..139
4.11.5 Interaction avec PYTHON ..139
4.11.6 Modification de template 139
4.11.6.1 Théorie 139
4.11.7 Interaction complète .141
4.11.7.1 Création et ouverture d'un document ODF ..141
4.11.7.2 ODT 142
4.11.7.3 ODS 143
4.11.8 Exemple .144
4.12 Serveur FTP .146
4.12.1 Connexion à un serveur FTP 146
4.12.2 Dépôt de fichiers/dossiers 147
4.12.3 Récupération de fichiers/dossiers 147
4.12.4 Annulation d'un transfert en cours ..148
4.12.5 Liste des éléments du dossier 148
4.12.6 Renommage d'un fichier/dossier ..148
4.12.7 Création d'un dossier 148
4.12.8 Effacement d'un fichier/dossier .148
4.12.9 Connaître la taille d'un fichier .149
4.12.10 Savoir où l'on se trouve 149
4.12.11 Utilisation de ligne de commandes ..149
4.12.12 Déconnexion du serveur FTP 149
4.12.13 Les messages d'erreurs possibles 150
4.12.14 Exemple ..151
4.13 Les mails avec SMTP .153
4.13.1 Données nécessaires 153
4.13.2 Exemple .153
4.14 Le port série 156
4.14.1 Paramétrage 156
4.14.2 Exemple .158
4.15 Le port parallèle 160
4.15.1 Paramétrage 160
4.15.2 Exemple .161
4.16 Le réseau: les bases ..162
4.16.1 Le module socket 162
4.16.2 Ouverture d'un port 162
4.16.3 Envoi de données 163
4.16.4 Réception de données .163
4.16.5 Fermeture d'un port 163
4.16.6 Exemple .164
4.17 La webcam avec OpenCV ..165
4.17.1 Utilisation basique .165
4.17.1.1 Connexion au flux vidéo ..165
4.17.1.2 Snapshot du flux ..166
4.17.1.3 Affichage des snapshots 166 4.17.1.4 Exemple d'affichage d'un flux webcam .167
4.17.2 Utilisation avancée .167
4.17.2.1 Les images ..167
4.17.2.2 Les enregistreurs vidéos 169
4.17.2.3 Les polices d'écriture 170 4.17.2.4 Utilisation du clavier ..172
4.17.3 Paramétrage de la webcam ..173
4.17.3.1 SetCaptureProperty 174
4.17.3.2 GetCaptureProperty 174
4.17.4 Traitements sur les frames ..174
4.17.4.1 Les types de données OpenCV ..174
4.17.4.2 AbsDiff 175
4.17.4.3 CvtColor ..176
4.17.4.4 Dilate .177
4.17.4.5 Erode 179
4.17.4.6 Combinaison: Ouverture .180
4.17.4.7 Combinaison: Fermeture .181
4.17.4.8 Combinaison: Gradient .181
4.17.4.9 Combinaison: Top Hat ..182
4.17.4.10 Combinaison: Black Hat 182
4.17.4.11 ContourArea .182
4.17.4.12 DrawContours ..183
4.17.4.13 EqualizeHist ..183
4.17.4.14 FindContours 184
4.17.4.15 HaarDetectObject ..186
4.17.4.16 InRangeS .187
4.17.4.17 Load 188
4.17.4.18 MatchTemplate 188
4.17.4.19 MemoryStorage ..189
4.17.4.20 MinMaxLoc .190
4.17.4.21 RunningAvg ..190
4.17.4.22 Smooth .191 4.17.4.23 Threshold 193
4.17.5 Ajout d'élément sur une image/frame 194
4.17.5.1 Rectangle ..194
4.17.5.2 Cercle ..195 4.17.5.3 Ligne .196
4.17.6 Détection de mouvement 196
4.17.6.1 Exemple ..198
4.17.7 Reconnaissance des couleurs 199
4.17.7.1 Exemple ..201
4.17.8 Détection de contours ..201
4.17.8.1 Exemple basique ..202
4.17.8.2 Exemple avancé 203
4.17.9 Détection d'une forme ..204
4.17.9.1 Recherche d'une image dans l'image .204
4.17.10 Détection de visage .205
4.17.10.1 Exemple 206
4.17.11 Création d'un algorithme de détection ..207
4.17.11.1 Création des positifs 208
4.17.11.2 Création des négatifs ..208
4.17.11.3 Marquage des positifs 209
4.17.11.4 Création du fichier vecteur ..210
4.17.11.5 Création du classificateur 210
4.18 Les Threads .212

4.18.1 Création .212
4.18.2 Lancement 213
4.18.3 Arrêt .214
4.18.4 Pause ..214
4.18.5 Appel toutes les x secondes 214
4.18.6 Exemple .214
4.19 Les PDF: Reportlab .216
4.19.1 Principes de fonctionnement ..216
4.19.2 Les bases .217
4.19.2.1 Canvas, format de page et unités ..217
4.19.2.2 Texte .218
4.19.2.2.1 Polices d'écriture .218
4.19.2.2.2 Simple ligne texte 219
4.19.2.3 Paragraphe ..220
4.19.2.3.1 Les styles .220
4.19.2.3.2 Création d'un paragraphe ..221
4.19.2.3.3 Ajout d'un paragraphe à un canvas 221
4.19.2.4 Couleur 222
4.19.2.4.1 Principe .222
4.19.2.4.2 Couleur de ligne 222
4.19.2.4.3 Couleur de remplissage ..222
4.19.2.4.4 Transparence .223
4.19.2.4.5 Couleur de texte ..223
4.19.2.4.6 Définir une couleur .223
4.19.2.5 Rotation ..224
4.19.2.6 Tableau 224
4.19.2.6.1 Tableau de base ..224
4.19.2.6.2 Les styles de tableaux .224
4.19.2.6.3 Taille de cellules ..226
4.19.2.6.4 Les bordures ..226
4.19.2.6.5 Les images dans les tableaux 227
4.19.2.6.6 Insertion d'un tableau dans un canvas .228
4.19.2.7 Dessin .228
4.19.2.7.1 Ligne 229
4.19.2.7.2 Cercle ..229
4.19.2.7.3 Rectangle .229
4.19.2.7.4 Épaisseur de lignes 230
4.19.2.7.5 Type de ligne ..230
4.19.2.8 Image 230
4.19.2.9 graphique ..231
4.19.2.9.1 Support de graphique ..231
4.19.2.9.2 Histogramme .231
4.19.2.9.3 Linéaire ..233
4.19.2.9.4 Camembert ..235
4.19.2.9.5 Intégration du support dans un canvas 237
4.19.2.10 Changer de page 237
4.19.2.11 Métadonnées PDF .238
4.19.2.11.1 Auteur ..238
4.19.2.11.2 Titre 238
4.19.2.11.3 Sujet ..238 4.19.2.12 Sauvegarde 238
4.19.3 Exemple .239
5 Les interfaces graphiques 243
5.1 PYGTK 244
5.1.1 Les fenêtres 245
5.3.1.1 Main .245
5.3.1.2 About ..247
5.3.1.3 Info / erreur / question / Attention 248
5.3.1.4 Print .251 5.1.1.5 File 253
5.1.2 Les conteneurs 255
5.1.2.1 Hbox / Vbox .255
5.1.2.2 Boîte à boutons 256
5.1.2.3 Tableau ..257
5.1.2.4 Fixed 259
5.1.2.5 ScrolledWindow 259
5.3.1.4.1 Création 259
5.3.1.4.2 Paramétrage .259
5.3.1.4.3 Ajout de l'enfant .260
5.1.3 Les widgets 260
5.1.3.1 Boutons à cliquer 260
5.1.3.2 Boutons à commuter 262
5.1.3.3 Boutons à cocher 262
5.1.3.4 Boutons radios .263
5.1.3.5 Combobox 264
5.1.3.6 Les onglets .265
5.1.3.7 Les tableaux de données ..267
5.1.3.7.1 Les TreeStores 268
5.1.3.7.2 Les TreeViews .271
5.1.3.7.3 Les TreeViewColumn ..273
5.1.3.8 Label 276
5.1.3.9 Textbox ..277
5.1.3.9.1 Monoligne 277
5.1.3.9.2 Multilignes ..277
5.1.3.10 Compteur ..280
5.1.3.11 Progressbar .282
5.1.3.12 Calendrier ..283
5.1.3.13 Image 283
5.1.3.13.1 Image en fond de fenêtre ..284
5.1.3.14 Cadre 286
5.1.3.15 Menu .287
5.1.3.15.1 Structure d'un menu ..288
5.1.3.15.2 Menu texte 289
5.1.3.15.3 Sous menu ..290
5.1.3.16 Barre d'outils ..291
5.1.3.17 Barre de statut 292
5.1.3.18 Les curseurs 292
5.1.3.19 Bulles d'aide 294
5.1.3.20 Les stocks (icônes) .294 5.1.3.21 Exemple ..301
6 La 3D ..305
6.1 Le format STL 306
6.1.1 STL ASCII ..306
6.1.2 STL Binaire .308
6.2 Open GL et PYTHON: les bases 309
6.2.1 Le repère XYZ 309
6.2.2 Notions de base ..310
6.2.2.1 Les vertex 310
6.2.2.2 Les polygones ..311
6.2.2.3 Les formes de base ..311
6.2.2.3.1 Les points ..312
6.2.2.3.2 Les lignes 312
6.2.2.3.3 Les triangles .313
6.2.2.4 État de surface d'un polygone 313
6.2.2.4.1 Les couleurs .313
6.2.2.4.2 Les textures ..313
6.3.1.1 La caméra 315
6.3.1.1.1 Les différents types de caméra 315
6.3.1.1.2 Positionnement ..316 6.2.2.5.3 Zoom, translation, et rotation .317
6.2.3 Fenêtre ..318
6.2.3.1 Les indispensables 318
6.2.3.1.1 Le constructeur de la classe ..318
6.2.3.1.2 Le main .319
6.2.3.1.3 L'InitGL .320
6.2.3.1.4 Le ReSizeGLScene 321
6.2.3.1.5 Le DrawnGLScene 322
6.2.3.2 Insertion dans une frame PYGTK .324
6.2.3.2.1 Principe 324 6.2.3.2.2 Mise en œuvre .325
6.3.2 Gestion de la souris .328
6.3.2.1 Les boutons et la molette ..328 6.2.4.2 Le deplacement de la souris 329
6.3.3 Gestion du clavier .330
6.3.3.1 Touches ALT, SHIFT, CTRL .330
6.3.3.2 Touches alphanumériques ..331 6.2.5.3 Touches spéciales .331
6.3.4 Exemple 333
6.4 Concepts mathématiques 2D ..337
6.4.1 Les plans 2D .337
6.4.2 La trigonométrie .338
6.4.2.1 Cercle trigonométrique 338
6.5 Concepts mathématiques 3D ..340
6.5.1 Formules ..340
6.5.1.1 Équation d'une droite en 3D .340
6.5.1.2 Équation d'un plan en 3D ..340
6.5.1.2.1 Méthode 1 340
6.5.1.2.2 Méthode 2 342
6.5.1.2.3 Cas particuliers ..342
6.5.1.3 Calcul de la normale au plan 3D 343
6.5.1.4 Calcul des coordonnées d'un point en 3D ..343
6.5.1.5 Rotation d'un point en 3D ..344 6.4.1.6 Un point appartient-il à un triangle ? ..345
6.6 Quelques techniques 3D 346
6.6.1 Depthmaps .346
6.6.2 Stéréogramme ..347
6.6.3 Scanner 3D laser .347
7 Gestion d'un projet 353
7.1 Organisation ..354
7.1.1 Description du PJ ..354
7.1.2 Structure du projet 354
7.1.3 Priorisation .355
7.1.4 Planification ..356
7.3.1.1 Planner ..356 7.1.4.2 Calligraplan .357
7.2 Viabilité & pérennité .359
7.2.1 Code 359
7.2.2 Tests ..359
7.2.2.1 Test unitaire 360
7.2.2.2 Test d'intégration 360
7.2.2.3 Test de validation ou fonctionnel .361
7.2.2.4 Construction d'un test .361
7.2.2.5 Logiciel dédié: Unittest 362
7.3.1.1.1 Fonctionnement de base ..362
7.3.1.1.2 Possibilités offertes .363
7.3.1.1.3 Test simple 364 7.2.2.5.4 Tests multiples 365
7.2.3 Documentation 366
7.2.3.1 Epydoc 366
7.3.2 Fichier de log 367
7.4 Versionning 369
7.5 Les licences libres .370
7.5.1 Licences Logicielles .370
7.5.1.1 GPL ..371
7.5.2 Licences Documentaires ..372
7.5.2.1 Creative Commons 372
8 Déploiement ..377
8.1 Création d'un .deb Manuel 378 8.2 Création d'un .DEB automatique ..382
8.2.1.1 Accueil - Information .383
8.2.1.2 Contrôle .384
8.2.1.3 Dépendances et conflits .385
8.2.1.4 Création de la structure d'install ..386
8.2.1.5 Scripts d'install et de désinstall 387
8.2.1.6 Historique .388
8.2.1.7 COPYRIGHT 389
8.2.1.8 Menu de lancement 390 8.2.1.9 La création du .deb 391
8.3 Utilisation du logiciel Alien ..392
9 Ressources .395
10 Annexes .403
10.1 Spécifications Fonctionnelles .404
10.2 Spécifications Techniques .406
10.3 Priorisation ..408
10.4 Tests Unitaires ..409
10.5 Tests Intégrations 410
10.6 Tests de Validation .411
10.7 Code ASCII ..412
10.8 Nuancier RGB Hexa 413
11 Index .415
Introduction
Que l'informaticien soit débutant ou averti, se pose à un moment la fatidique question du langage à adopter.
En effet, tantôt nous avons besoin d'un langage procédural, tantôt d'un langage objet ; tantôt d'un langage de script, tantôt d'un langage avec IHM
C'est à ce niveau que PYTHON est intéressant. En effet, ce langage sait s'adapter à de nombreuses situations. Capable de créer des clients lourds ou léger, des applications standards ou mobiles, il sait tout faire.
De plus, langage OPEN SOURCE par excellence, ce langage bénéficie d'une très large communauté et d’appuis sérieux et solides tels la société GOOGLE qui s'en sert comme langage principal, la NASA ou encore de nombreux logiciels OPEN SOURCE reconnus comme BLENDER.
Prenant de plus en plus d'ampleur dans l'univers de la programmation, PYTHON remplace peu à peu ceux qui avaient la préférence dans de nombreux établissements informatiques, car contrairement à d'autres, PYTHON ne nécessite nullement de multiples mises à jour par mois. Chaque évolution est mûrement réfléchie avant d'être déployée.
Ce livre est conçu à la fois comme un condensé d'informations pour apprendre PYTHON, mais également comme un aide-mémoire toujours utile à avoir sous la main.
Ce livre a été conçu sous Linux, et par conséquent, certain exemples peuvent ne pas fonctionner sous d'autre OS.
Bonne lecture
1 |
Présentation |
Wikimedia Commons,
Lorsque vient le moment de faire un choix de langage, deux grandes catégories s'affrontent: les langages compilés et les langages interprétés.
Les langages compilés, comme l'indique leur nom, nécessite un compilateur afin de transformer le code source en langage machine. Cela rend le fichier résultant non modifiable, et lui confère une certaine vélocité d'exécution, la machine se contentant de lire des instructions et de les exécuter. C'est le cas du très connu langage C.
Les langages interprétés, eux, ne passent pas par cette phase de compilation. On utilise non pas un compilateur mais un interpréteur. Cet interpréteur va lire l'ensemble du code et le traduire en temps réel à la machine pour exécution.
Si cela peut paraître à certain moins rapide à l'exécution qu'un langage compilé, il n'y a en fait plus forcément beaucoup de différences entre ces deux types de langages avec nos machines récentes.
Le code du langage interprété reste lisible. Il y a aussi bien entendu la possibilité de créer un " Byte Code " qui est une préinterprétation du code pour la machine (extension .pyc).
Deux avantages: une amélioration des performances, ce qui peut parfois s'avérer utile voir indispensable, et la possibilité de ne pas divulguer le code, ce que certain verront comme un point positif.
De fait, un langage interprété est très pratique en debuggage, puissant et réactif en exécution.
PYTHON est un de ces langages interprétés, avec toute la puissance que cela implique.
1.2 |
Le langage PYTHON en bref |
Le langage PYTHON tire son nom du fait que le créateur de ce langage est un fan des comiques anglais les " Monthy PYTHON ".
Créé en 1990 par Guido VAN ROSSUM, c'est un langage open source, multiplateformes et multifonctions. Les programmeurs s'en servent aussi bien pour remplacer du shell en effectuant du scripting que pour réaliser de la modélisation 3D avec interface graphique.
Ce langage est désormais géré par la PYTHON Software Foundation. Principalement utilisé en branche 2.x, la version 3.x est une version " nettoyée " dans le sens ou de nombreux doublons et de nombreuses redondances ont été supprimées afin d’épurer le code du langage.
De fait un code développé en 2.x peut se révéler partiellement incompatible avec la 3.x. Il est souvent recommandé de commencer à développer directement avec la 3.x.
Dans les faits, cette branche est actuellement encore peu utilisée, mais se tenir à ce conseil est garantir une certaine viabilité du code, ce qui est non négligeable.
2.1 Définition
Il existe de nombreuses définitions de la POO. Pour faire simple, disons qu'il s'agit d'utiliser des copies de briques logicielles afin d'aboutir à notre fin.
Ces copies de briques de base, de références, sont ce qu'on appelle des OBJETS. Chaque objet va posséder des caractéristiques (appelées PROPRIETES) et des possibilités (appelées METHODES).
Cette façon de travailler, va permettre une plus grande rigueur dans la façon de coder, mais également une viabilité du travail effectué.
Chaque brique est ainsi réutilisable à l'infini dans n'importe quel projet, possède sa propre documentation et est maintenable facilement.
2.2 Les objets par l'exemple
L'objet est une brique de référence pour programmer en POO.
Afin de rentrer plus amplement dans le détail, nous allons prendre un exemple concret, beaucoup utilisé: la voiture.
Qu'est-ce qu'une voiture ? Quelle est la définition d'une voiture ?
Selon wikipedia, c'est un véhicule terrestre à roues équipé avec un moteur embarqué. En simplifié, une voiture possède des roues, un moteur et sert à se déplacer.
Retenons cette définition simpliste. Cette voiture peut avoir des formes, couleurs ou encore marques différentes. De même, elle peut réaliser différentes actions.
En POO, la voiture sera notre objet, sa forme ou sa couleur ses propriétés et les différentes actions qu'elle peut réaliser ses méthodes.
2.2.1 Les classes
Cet ensemble, ce qui constitue en quelque sorte la quintessence d'une voiture dans notre exemple est ce qu'on appelle une classe. On peut ainsi comparer une classe à un moule servant à créer des objets
2.2.2 Les propriétés
Les propriétés sont ce qui définit notre objet. Par exemple, sa couleur, ou encore sa marque pour notre exemple.
Ces propriétés peuvent être accessibles! uniquement en lecture, uniquement en écriture ou bien les deux. Elles vous permettront d'interagir avec votre objet afin de le paramétrer au mieux à vos besoins.
2.2.3 Les méthodes
Les méthodes sont les possibilités qu'offre notre objet. Dans notre exemple, une voiture peut avancer, reculer, allumer ses phares, …
Chacune de ces actions constitue une méthode différente de l'objet voiture.
Pour résumé, nous avons une classe voiture à partir de laquelle nous pouvons créer des objets:
ma_voiture=Voiture()
Notre objet possède des propriétés sur lesquelles nous pouvons agir pour le configurer:
ma_voiture.couleur=vert
Il possède également des méthodes pour nous permettre de lui dire quoi faire:1
2.3 L'encapsulation
Le principe d'encapsulation est un des principes fort de la programmation objet. Pour simplifier, cela signifie que pour des raisons de sécurités ou de gestions, nous allons rendre certaines variables accessibles ou non depuis l’extérieur du code.
Si cela peut parfois sembler abstrait, dans les faits cela permet souvent d'éviter qu'un attribut soit changer en cours de calcul et ne provoque un crash du code.
Cela peut également être un moyen d'encadrer précisément l'utilisation d'un module.
2.4 L’héritage
Le principe de l'héritage, autre principe fort de la programmation objet, est qu'une classe peut elle même hériter d'une autre classe.
Ainsi, pour reprendre l'exemple des voitures, une classe Twingo héritera d'une classe mère voiture. Cette classe Twingo possédera les mêmes caractéristiques que celles définies dans la classe voiture (un moteur, un châssis, un volant, …) mais en possédera des complémentaires (options spécifiques à la voiture).
4.19.1 Principes de fonctionnement
Afin de pouvoir utiliser correctement Reportlab, et avant même de voir les bases de ce module, il est indispensable de prendre connaissance de ses principes de fonctionnement.
Il ne faut pas imaginer en effet que le module va nous permettre d'écrire comme dans un traitement de texte type Writer.
Reportlab part d'une feuille totalement vierge, à créer, et s'appelant canvas, sur laquelle nous allons venir déposer différents types d'objets (texte, image, …) afin de créer un template, ou plus simplement un fichier tel qu'on le désire.
Le fonctionnement se rapprocherait donc plutôt ici de Draw que de Writer.
De plus, comme dans Draw, si l'on dispose un élément hors de la page, aucune alerte ne sera levée. De fait, il est primordial de savoir précisément la disposition désirée afin d'éviter toute mauvaise surprise.
A l'image de Draw, vous devrez gérer l'ordre d'insertion afin d'éviter tout conflit de disposition: le dernier élément inséré est placé au-dessus des autres.
Il faut également savoir que cela implique que le code soit exécuté de manière procédurale. En clair, si à un moment, vous demandez une rotation de 90°, cela veut dire que tant que vous ne changerez pas cette rotation, tout le code interprété sera tourné de 90°.
Une fois ces quelques principes assimilés, l'utilisation de Reportlab vous semblera plus naturelle. Pour ceux qui trouveraient ces principes encore un peu flou, je ne peu que les inviter à travailler un peu avec Libre Office Draw afin d'illustrer concrètement les principes explicités ici.
4.19.2.1 Canvas, format de page et unités
Reportlab, sait gérer les différents formats de page standard existant. Vous possédez également la possibilité de définir de toute pièce la dimension de la page voulue.
Pour des raisons de lisibilité de code et de simplicité de codage, je vous recommande la seconde option. En précisant en commentaire le format utilisé (A4, letter, …) le code n'en sera que plus lisible.
from reportlab.pdfgen import canvas from reportlab.lib.units import*
canvas = canvas.Canvas("", pagesize=(210.0 * mm,297.0 * mm)) #A4Comme nous le voyons dans notre exemple, créer un canvas est très simple. Le principal est de connaître le nom du pdf à générer, et les dimensions à utiliser.
Les dimensions passées permettent d'ailleurs de définir si l'on fonctionne en portrait ou bien en paysage.
Enfin, le dernier point non négligeable ici concerne Les unités.
Les principales disponibles sont le cm, le mm et le inch (pouce).
Dans notre cas, fonctionnant en système ISO, je vous recommande d'utiliser le mm.