Convention d'écriture en Python

1 1 1 1 1 1 1 1 1 1 Rating 3.88 (4 Votes)
Submit to DeliciousSubmit to DiggSubmit to FacebookSubmit to Google PlusSubmit to StumbleuponSubmit to TechnoratiSubmit to TwitterSubmit to LinkedIn

Convention d'écriture en Python

Ce tutoriel rassemble quelques règles usuelles de présentation de programmes en Python.

Il est important de noter que ces règles sont bien des conventions et ne font pas partie de la syntaxe de Python. Vous pouvez parfaitement écrire des programmes Python corrects mais illisibles ou très confus.

Mais si une syntaxe correcte est nécessaire pour que la machine vous comprenne, une écriture claire et cohérente est nécessaire pour que d'autres humains vous comprennent.

Règles de nommage

Concernant le nommage, les conventions suivantes sont utilisées :

  • Les noms de variables commencent par une minuscule et les parties sont accolées avec une majuscule :
variable, variableDeTest
  • Les variables privées sont précédées de deux soulignés :
__variablePrive = 2
  • Les noms de classe utilisent les mêmes conventions que les variables, mais commencent par une majuscule :
class Class1, class ClassDeTest
  • Les noms de méthodes sont en minuscules et les parties sont séparées par un souligné :
def methode_de_test(self):
  • Les méthodes privées sont précédées de deux soulignés :
def __methode_prive(self):
  • La manière la plus simple de nommer un callback est de terminer son nom par la notation conventionnelle "_cb" :
def event_cb(self, widget, event, *args):
  • Les noms de constantes sont écrits en majuscules, avec un souligné comme séparateur :
CONSTANTE_DE_TEST = 10

Écriture du code

Deux conventions possibles pour l'écriture du code. Le choix de la convention dépendant du goût de chacun ainsi que de la complexité du code à écrire :

  • Chaque méthode est séparée de la suivante par une ligne blanche. Dans ce cas, les classes sont séparées entre elles par deux lignes vides :
class Test:
         ```Cette classe définit une classe de test```
def __init__(self):
            self.var = 0
def add_var(self, count=1):
             self.var += count
class Test2:
        ```Cette classe définit un test2```
def __init__(self):
            self.__variable_privee = 0
def test_variable(self):
            self.__variable_privee = 1
def is_variable(self):
            return self.__variable_privee
  • Chaque méthode est accollée à la méthode précédente. Dans ce cas, une seule ligne de séparation est suffisante entre les classes :
class Test:
         ```Cette classe définit une classe de test```
         def __init__(self):
            self.var = 0
         def add_var(self, count=1):
             self.var += count
class Test2:
        ```Cette class définit un test2```
        def __init__(self):
            self.__variable_privee = 0
        def test_variable(self):
           self.__variable_privee = 1
        def is_variable_privee(self):
            return self.__variable_privee
  • Il est recommandé de documenter chaque classe.
  • À l'intérieur d'une méthode longue on peut éventuellement regrouper les instructions en blocs logiques, en séparant chaque bloc par une ligne vide. Il ne faut cependant pas abuser des lignes vides dans une méthode, car on perd en lisibilité de l'ensemble.
  • On place un espace avant et après le signe égal pour l'affectation des variables :
self.variable = 3
  • En revanche, le signe égal est accollé entre un paramètre de fonction et sa valeur par défaut :
def fonction_test(self, count=1):
  • En python, il n'est pas dans les habitudes d'aligner le contenu de lignes successives. On écrira donc :
variable = 3
var1 = 1
variable1 = 5

plutôt que

variable  = 3
var1      = 1
variable1 = 5

Importation des modules

Dans la mesure du possible, faire un import de module de la forme :

import os

Plutôt qu'un import de la forme :

from os import *

Ceci permet de lever les ambiguïtés, et de savoir à tout instant d'un provient l'objet, la variable ou la classe invoquée. Ainsi, on écrira :

os.path.join(self.path, '/test.py')

au lieu de

join(self.path, '/test.py')

 

Submit to DeliciousSubmit to DiggSubmit to FacebookSubmit to Google PlusSubmit to StumbleuponSubmit to TechnoratiSubmit to TwitterSubmit to LinkedIn