Présentation python : Épisode 3 Comment programmer comme un gentilhomme ? Le style de code ou comment bien présenter Les test unitaires ou comment être sûr de bien se comporter Les exceptions ou comment faire face à toutes les situations Un peu d'objet ou comment avoir la classe Étienne Loks et David Mentré - 25 février 2008
Les styles de code : pourquoi ? def Range2List(TheRange): """ Turns octet range user input in python list""" TheRange=TheRange.split("-") return range(int(TheRange[0]),int(TheRange[1])+1) def octet_range_to_list(octet_range): """Turns an octet range into a python list. Keywords arguments: octet_range – an octet range separed by a dash """ octet_range = octet_range.split("-") return range(int(octet_range[0]), int(octet_range[1]) + 1)
Les styles de codes Documents de référence : PEP 8 et PEP 257 Éléments à prendre en compte (entre autres) : indentation : 4 espaces longueur de ligne : 79 caractères espacement langue anglaise conventions de nommage
Les tests unitaires But : s'assurer du fonctionnement correct d'un bout de logiciel Modules spécifiques (unittest) mais peut se faire simplement Utilisation de assert def test_octet_range_to_list(): assert octet_range_to_list(”1-5”) == [1, 2, 3, 4, 5] assert octet_range_to_list(”1-300”) == range(1, 255)
Les exceptions : utilisation Mécanisme de gestion des erreurs try: 1/0 except ZeroDivisionError: print ”Aïe, division par zéro !” Gros avantage : si on oublie de gérer l'erreur, elle n'est pas perdue Fonctionnement while True: try: x = int(raw_input("Please enter a number: ")) break except ValueError: print "Oups ! Nombre invalide. Essaye encore..."
Les exceptions : syntaxe Il peut y avoir plusieurs exceptions import sys try: f = open('myfile.txt') s = f.readline() i = int(s.strip()) except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) except ValueError: print "Could not convert data to an integer." except: print "Unexpected error:", sys.exc_info()[0] raise
Les exceptions : style try... except try: octet_range_to_list(”1”) except: print ”La conversion de la plage d'octet s'est mal déroulée” Toujours préciser l'exception attendue try: octet_range_to_list(”1”) except IndexError: print ”La saisie utilisateur n'est pas une plage d'octet conforme”
Bases de programmation objet Un objet est une entité que l'on construit par instanciation à partir d'une classe (une « catégorie » ou un « type » d'objet) chaine = str(”Ma chaine”) class Dice: ”””Un dé à plusieurs faces””” mon_nouveau_de = Dice() un_autre_de = Dice() La classe est un espèce de « moule » Chaque « instance » est un gâteau produit par le moule
Bases de programmation objet : les attributs Un objet dispose d'attributs attributs : informations dans l'objet, spécifiques à une instance class Dice: ”””Un dé à plusieurs faces””” def __init__(self): self.nombre_faces = 6 mon_nouveau_de = Dice() print mon_nouveau_de.nombre_faces class Dice: ”””Un dé à plusieurs faces””” def __init__(self, nombre_faces): self.nombre_faces = nombre_faces de_6_face = Dice(6) print de_6_face.nombre_faces piece = Dice(2) print piece.nombre_faces
Bases de programmation objet : les méthodes Un objet dispose de méthodes (fonctions spécifiques à l'objet) import random class Dice: ”””Un dé à plusieurs faces””” def __init__(self, nombre_faces): self.nombre_faces = nombre_faces def rouler(self): ”””Faire rouler le dé””” return random.randint(1, self.nombre_faces) >>> de_6_face = Dice(6) >>> print de_6_face.rouler() 4 >>> print de_6_face.rouler() 2 >>> print de_6_face.rouler() 3 >>> print de_6_face.rouler() 6
Pourquoi les objets Bases pour programmer correctement et pour pouvoir programmer en équipe Un objet est une entitée autonome et opaque interface avec l'extérieur au travers des attributs et méthodes permet de changer l'intérieur de l'objet sans le dire à tout le monde ⇒ modularité et extensibilité Importance des notions de programmation objet : tout (ou presque) est objet en python
Conclusion Présentez bien votre code ça facilite sa relecture par d'autres... ou vous même ;-) Faites des tests unitaires s'assurer qu'on a rien cassé en faisant des modifications Utilisez les exceptions mécanisme élégant de gestion des erreurs Apprendre les concepts objet ce qu'on a vu n'est qu'une première introduction