Structure et utilisation d’une classe en Python

Structure et utilisation d’une classe en Python

Il faut tout d’abord définir la classe qui va servir de base pour créer des objets. Cette classe est en quelque sorte une catégorie d’objets qui en définit les caractéristiques et les comportements. Nous allons modéliser ces objets dans cette classe, leur donner des attributs (des données liées à ces objets), leur donner des comportements (des méthodes suivies de code permettant de traiter ces données ou toute autre chose dont nous avons besoin comme par exemple des fonctions builtins du langage Python)

class LeNomDeMaClasse (object) :
    pass

Le mot clé « pass » permet de se passer de code et de ne pas générer d’erreur.
Le mot clé « object » nous dit évidemment que nous sommes dans le cadre de la programmation orientée objet.

J’exécute ce script dans l’interpréteur, rien ne se passe !!!! En effet, il faut déclarer un objet appartenant à cette classe.

>>> un_objet = LeNomDeMaClasse ()
>>>

Python a accepté ce code
Quel est le type de ce nouvel objet « un_objet » ?

>>> un_objet = LeNomDeMaClasse ()
>>> type (un_objet)
<class '__main__.LeNomDeMaClasse'>
>>>

Python nous dit que « un_objet » est de la classe « LeNomDeLaClasse »
Nous allons maintenant donner à cet objet ou un autre objet déclaré des attributs.

Pour se faire, il nous faut une première méthode (fonction dans une classe). Cette première méthode est invariablement la méthode constructeur « __init__ () » dans laquelle nous allons déclarer des attributs d’objet :

class LeNomDeMaClasse (object) :

    def __init__ (self) :
        self.attribut_01 = "hello"
        self.attribut_02 = 346
    

Nous exécutons ce script en déclarant un nouvel objet :

>>> 
>>> autre_objet = LeNomDeMaClasse ()
>>> autre_objet.attribut_01
'hello'
>>> autre_objet.attribut_02
346
>>>

La syntaxe est la suivante : « objet.attribut »
Vous l’avez compris, l’argument « self » remplaçant dans le script le nom de l’objet déclaré.
Cette méthode constructeur est évidemment essentielle. Elle permet donc de déclarer des attributs d’objet, des données. Le propre de la programmation étant de manipuler des données.
C’est ce que nous allons faire dans les méthodes suivantes.

class LeNomDeMaClasse (object) :

    def __init__ (self) :
        self.attribut_01 = "hello"
        self.attribut_02 = 346

    def methode_01 (self) :
        compteur = 1
        while compteur <= 5:
            print (compteur, " : ", self.attribut_01)
            compteur = compteur + 1

Nous exécutons ce script et nous appelons cette méthode :

>>> 
>>> autre_objet = LeNomDeMaClasse ()
>>> autre_objet.methode_01 ()
1  :  hello
2  :  hello
3  :  hello
4  :  hello
5  :  hello
>>> 

La syntaxe est la suivante « objet.methode () »
Autre méthode créée :

class LeNomDeMaClasse (object) :

    def __init__ (self) :
        self.attribut_01 = "hello"
        self.attribut_02 = 346

    def methode_01 (self) :
        compteur = 1
        while compteur <= 5:
            print (compteur, " : ", self.attribut_01)
            compteur = compteur + 1

    def methode_02 (self) :
        compteur = 1
        addition = 0
        while compteur <= 5:
            print (compteur, " : ", self.attribut_02 + addition)
            compteur = compteur + 1
            addition = addition + 1
            

Nous exécutons ce script :

>>> 
>>> autre_objet = LeNomDeMaClasse ()
>>> autre_objet.methode_01 ()
1  :  hello
2  :  hello
3  :  hello
4  :  hello
5  :  hello
>>> autre_objet.methode_02 ()
1  :  346
2  :  347
3  :  348
4  :  349
5  :  350
>>> 

Avec l’instruction et le code que nous allons ajouter, il n’y aura plus besoin de déclarer des objets dans l’interpréteur puisque nous les aurons déclarés directement dans le script de la classe, le script va s’exécuter automatiquement :

class LeNomDeMaClasse (object) :

    def __init__ (self) :
        self.attribut_01 = "hello"
        self.attribut_02 = 346

    def methode_01 (self) :
        compteur = 1
        while compteur <= 5:
            print (compteur, " : ", self.attribut_01)
            compteur = compteur + 1

    def methode_02 (self) :
        compteur = 1
        addition = 0
        while compteur <= 5:
            print (compteur, " : ", self.attribut_02 + addition)
            compteur = compteur + 1
            addition = addition + 1

if __name__ == "__main__" :
    encore_un_objet = LeNomDeMaClasse ()
    print ("Exécution de la méthode 01 : ")
    encore_un_objet.methode_01 ()
    print ("Exécution de la méthode 02 : ")
    encore_un_objet.methode_02 ()
    print ("Fin de l'exécution automatique")
            

Exécution :

>>> 
Exécution de la méthode 01 : 
1  :  hello
2  :  hello
3  :  hello
4  :  hello
5  :  hello
Exécution de la méthode 02 : 
1  :  346
2  :  347
3  :  348
4  :  349
5  :  350
Fin de l'exécution automatique
>>> 

« if __name__ == « __main__ » : » pourrait se traduire par si ce programme est exécuté directement comme étant le principal (main), exécuter le code qui suit !

Si vous devez déclarer des attributs de classe dits statiques ne devant donc pas changer ou devant être utilisés souvent et un peu partout dans le script. A ne pas confondre avec les attributs d’objets déclarés dans la méthode constructeur « __init__ () »:

class LeNomDeMaClasse (object) :

    attribut_de_classe = "Ceci est une donnée : "

    def __init__ (self) :
        self.attribut_01 = "hello"
        self.attribut_02 = 346

    def methode_01 (self) :
        compteur = 1
        while compteur <= 5:
            print (compteur, " : ", self.attribut_01)
            compteur = compteur + 1

    def methode_02 (self) :
        compteur = 1
        addition = 0
        while compteur <= 5:
            print (compteur, " : ", self.attribut_02 + addition)
            compteur = compteur + 1
            addition = addition + 1

    def methode_03 (self) :
        print (LeNomDeMaClasse.attribut_de_classe, self.attribut_01)
        print (LeNomDeMaClasse.attribut_de_classe, self.attribut_02)

if __name__ == "__main__" :
    encore_un_objet = LeNomDeMaClasse ()
    print ("Exécution de la méthode 03 : ")
    encore_un_objet.methode_03 ()

Exécution :

>>> 
Exécution de la méthode 03 : 
Ceci est une donnée :  hello
Ceci est une donnée :  346
>>>

Un attribut de classe est en quelque sorte une variable constante que l’on peut utiliser un peu partout dans le script.
Si j’enlève l’exécution automatique, je peux accéder à cet attribut de classe sans déclarer d’objet

class LeNomDeMaClasse (object) :

    attribut_de_classe = "Ceci est une donnée : "

    def __init__ (self) :
        self.attribut_01 = "hello"
        self.attribut_02 = 346

    def methode_01 (self) :
        compteur = 1
        while compteur <= 5:
            print (compteur, " : ", self.attribut_01)
            compteur = compteur + 1

    def methode_02 (self) :
        compteur = 1
        addition = 0
        while compteur <= 5:
            print (compteur, " : ", self.attribut_02 + addition)
            compteur = compteur + 1
            addition = addition + 1

    def methode_03 (self) :
        print (LeNomDeMaClasse.attribut_de_classe, self.attribut_01)
        print (LeNomDeMaClasse.attribut_de_classe, self.attribut_02)

Exécution :

>>> LeNomDeMaClasse.attribut_de_classe
'Ceci est une donnée : '
>>>

Les commentaires dans une classe ou docstring pouvant être consultés via la fonction « help ( ) » :

"""Ceci est un commentaire ou docstring du module ou script"""

class LeNomDeMaClasse (object) :
    """Ceci est un commentaire de classe (docstring)"""

    attribut_de_classe = "Ceci est une donnée : "

    def __init__ (self) :
        """Ceci est un commentaire de la méthode __init__ (docstring)"""
        self.attribut_01 = "hello"
        self.attribut_02 = 346

    def methode_01 (self) :
        """Ceci est un commentaire de la méthode 01(docstring)"""
        compteur = 1
        while compteur <= 5:
            print (compteur, " : ", self.attribut_01)
            compteur = compteur + 1

    def methode_02 (self) :
        """Ceci est un commentaire de la méthode 02(docstring)"""
        compteur = 1
        addition = 0
        while compteur <= 5:
            print (compteur, " : ", self.attribut_02 + addition)
            compteur = compteur + 1
            addition = addition + 1

    def methode_03 (self) :
        """Ceci est un commentaire de la méthode 03(docstring)"""
        print (LeNomDeMaClasse.attribut_de_classe, self.attribut_01)
        print (LeNomDeMaClasse.attribut_de_classe, self.attribut_02)

Exécution de la fonction « help ( ) » via l’interpréteur à propos de la classe :

>>> help (LeNomDeMaClasse)
Help on class LeNomDeMaClasse in module __main__:

class LeNomDeMaClasse(builtins.object)
 |  Ceci est un commentaire de classe (docstring)
 |  
 |  Methods defined here:
 |  
 |  __init__(self)
 |      Ceci est un commentaire de la méthode __init__ (docstring)
 |  
 |  methode_01(self)
 |      Ceci est un commentaire de la méthode 01(docstring)
 |  
 |  methode_02(self)
 |      Ceci est un commentaire de la méthode 02(docstring)
 |  
 |  methode_03(self)
 |      Ceci est un commentaire de la méthode 03(docstring)
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  attribut_de_classe = 'Ceci est une donnée : '

Exécution de la fonction « help ( ) » via l’interpréteur à propos du script en général considéré comme un module par Python, le script étant  « first_class.py » :

>>> help ("first_class")
Help on module first_class:

NAME
    first_class - Ceci est un commentaire ou docstring du module ou script

CLASSES
    builtins.object
        LeNomDeMaClasse
    
    class LeNomDeMaClasse(builtins.object)
     |  Ceci est un commentaire de classe (docstring)
     |  
     |  Methods defined here:
     |  
     |  __init__(self)
     |      Ceci est un commentaire de la méthode __init__ (docstring)
     |  
     |  methode_01(self)
     |      Ceci est un commentaire de la méthode 01(docstring)
     |  
     |  methode_02(self)
     |      Ceci est un commentaire de la méthode 02(docstring)
     |  
     |  methode_03(self)
     |      Ceci est un commentaire de la méthode 03(docstring)
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors defined here:
     |  
     |  __dict__
     |      dictionary for instance variables (if defined)
     |  
     |  __weakref__
     |      list of weak references to the object (if defined)
     |  
     |  ----------------------------------------------------------------------
     |  Data and other attributes defined here:
     |  
     |  attribut_de_classe = 'Ceci est une donnée : '

FILE
    /home/fabricedumont/Bureau/first_class.py


>>> 

Je vous laisse voir et repérer les différences entre les deux appels de fonction « help ( ) » !!!! 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *