Python 3 : Différence entre versions

De TARENTINO
Aller à la navigationAller à la recherche
 
(139 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 +
{{Menu_Python}}{{En_resume}}{{Coulpython}}{{Pythonline3}}{{Sideperfection}}{{Sidebaradm}}{{Navigationp}}<p align="right" style="color: blue">'''{{CURRENTDAY}}/{{CURRENTMONTH}}/{{CURRENTYEAR}}'''</p><font color=black>
 +
__NOTOC__
 +
= <font size=6 color=red>'''Perfectionnement'''</font> =
 +
== <font color=green>'''Introduction'''</font> ==
 +
* Python est un langage de programmation inventé par Guido van Rossum. La première version de python est sortie en 1991.<br>C'est un langage de programmation interprété, c'est-à-dire qu'il n'est pas nécessaire de le compiler avant de l'exécuter.
 +
== <font color=green>'''Les Objets'''</font> ==
 +
* Pour pouvoir créer des objets dans un programme, il faut avant tout avoir défini une classe.
 +
** Il s'agit en quelque sorte d'un plan , qui décrit les caractéristiques de l'objet.
 +
** En particulier, une classe définit les deux éléments constitutifs des objets que sont ses attributs et fonctionnalités.
 +
* Un objet est une instance d'une classe, qui possède son propre état, défini par les valeurs de ses différents attributs.
 +
* On peut créer autant d'objets que l'on désire avec une classe.
 +
== <font color=green>'''Les attributs'''</font> ==
 +
* Les attributs de classe permettent de stocker des informations au niveau de la classe. Elle sont similaires '''aux variables'''.
 +
* Il est possible à tout moment de créer un attribut pour l'objet.
 +
== <font color=green>'''Les méthodes'''</font> ==
 +
<div style="width:50%; height:250px; top=0; right=10; overflow:auto; border:solid 1px black;">
 +
* Les méthodes sont '''des fonctions''' définies dans une classe.
 +
<syntaxhighlight lang="python" line='line'>
 +
#!/usr/bin/python3
 +
# coding: utf-8
 +
class Voiture:
 +
    def __init__(self):
 +
        self.nom = "Ferrari"
 +
    def donne_moi_le_modele(self):
 +
        return "250"
 +
</syntaxhighlight>
  
<div style="width:750px; height:90pc; overflow:auto; border:solid 1px black;">
+
>>> ma_voiture=Voiture()
{{:Python_atelier1_exercice1}}
+
>>> ma_voiture.donne_moi_le_modele()
 +
'250'
 
</div>
 
</div>
 +
 +
== <font color=green>'''Les propriétés'''</font> ==
 +
<div style="width:50%; height:250px; top=0; right=10; overflow:auto; border:solid 1px black;">
 +
* Il est de préférable de passer par des propriétés pour changer les valeurs des attributs.
 +
* Il existe une convention pour changer la valeur d'un attribut, de passer:
 +
** par des getter '''(ou accesseurs)''' en francais
 +
** des setter '''( mutateurs )'''
 +
<syntaxhighlight lang="python" line='line'>
 +
class Voiture(object):
 +
    def __init__(self):
 +
        self._roues=4
 +
    def _get_roues(self):
 +
        print("Récupération du nombre de roues")
 +
        return self._roues
 +
    def _set_roues(self, v):
 +
        print("Changement du nombre de roues")
 +
        self._roues  =  v
 +
    roues=property(_get_roues, _set_roues)
 +
</syntaxhighlight>
 +
>>> ma_voiture=Voiture()
 +
>>> ma_voiture.roues=5
 +
Changement du nombre de roues
 +
>>> ma_voiture.roues
 +
Récupération du nombre de roues
 +
5
 +
</div>
 +
 +
== <font color=green>'''Les décorateurs'''</font> ==
 +
<div style="width:50%; height:250px; top=0; right=10; overflow:auto; border:solid 1px black;">
 +
<syntaxhighlight lang="python" line='line'>
 +
class Voiture(object):
 +
    def __init__(self):
 +
        self._roues=4
 +
    @property
 +
    def _get_roues(self):
 +
        print "Récupération du nombre de roues"
 +
        return self._roues
 +
    @roues.setter
 +
    def _set_roues(self, v):
 +
        print "Changement du nombre de roues"
 +
        self._roues  =  v
 +
    roues=property(_get_roues, _set_roues)
 +
</syntaxhighlight>
 +
</div>
 +
 +
== <font color=green>'''L'héritage de classe'''</font> ==
 +
<div style="width:50%; height:250px; top=0; right=10; overflow:auto; border:solid 1px black;">
 +
* Permet de créer de nouvelles classes mais avec une base existante.
 +
<syntaxhighlight lang="python" line='line'>
 +
class Voiture:
 +
    roues = 4
 +
    moteur = 1
 +
    def __init__(self):
 +
        self.nom = "A déterminer"
 +
class VoitureSport(Voiture):
 +
    def __init__(self):
 +
        self.nom = "Ferrari"
 +
</syntaxhighlight>
 +
* On a indiqué que '''VoitureSport''' a hérité de classe '''Voiture''', elle récupère toutes ses méthodes et ses attributs.
 +
----
 +
* Instanciation de la classe voiture
 +
>>> ma_voiture=Voiture()
 +
>>> ma_voiture.nom
 +
'A déterminer'
 +
>>> ma_voiture.roues
 +
4
 +
----
 +
* Instanciation de la classe VoitureSport
 +
>>> ma_voiture_sport=VoitureSport()
 +
>>> ma_voiture_sport.nom
 +
'Ferrari'
 +
>>> ma_voiture_sport.roues
 +
4
 +
* On parle de surcharge de méthode.
 +
</div>
 +
 +
== <font color=green>'''Classes et Instances'''</font> ==
 +
<div style="width:50%; height:250px; top=0; right=10; overflow:auto; border:solid 1px black;">
 +
[[Fichier:Class 01.png|cadre|gauche]]<br>
 +
* Notion de classe (Class) d'objet est un type (type)
 +
* Elle comprend 2 parties: Attribut, Méthode
 +
* Une classe regroupe des fonctions et des attributs qui définissent un objet.
 +
* On appelle par ailleurs les fonctions d'une classe des " méthodes ".
 +
<br>
 +
<div style="width:50%; height:250px; top=0; right=10; overflow:auto; border:solid 1px black;">{{:Python_classe}}</div>
 +
* Notion d'objet, d'instanciation et de constructeur
 +
* Une instance d'objet est un objet concret.
 +
* La création d'un objet est une instanciation.
 +
* La méthode qui la réalise est le constructeur.
 +
* La méthode '''__init__()''' est appelée lors de la création d'un objet.
 +
* '''self.attribut_1''' est une manière de stocker une information dans la classe. On parle d'attribut de classe. Dans notre cas, on stocke le nom dans l'attribut '''attribut_1'''.
 +
</div>
 +
 +
== <font color=green>'''Classes et Modules'''</font> ==
 +
* La classe est un concept de base de la programmation orientée objet.
 +
* En langage Python, on peut très bien écrire un script sans définir de classes.<br>Cependant, On manipule forcément des objets (ou instances de classes):<br>une variable entière est une instance de la classe int, une chaîne de caractères est une instance de la classe str...
 +
=== <font color=Magenta>'''Définition d'une classe'''</font> ===
 +
* Exemple:
 +
<div style="width:50%; height:250px; top=0; right=10; overflow:auto; border:solid 1px black;">
 +
<syntaxhighlight lang="python" line='line'>
 +
#!/usr/bin/python3
 +
# -*- coding: utf-8 -*-
 +
# CompteBancaire.py
 +
# définition de la classe Compte
 +
class Compte:
 +
  """Un exemple de classe :
 +
  gestion d'un compte bancaire"""
 +
  # définition de la méthode spéciale __init__
 +
  def __init__(self, soldeInitial):
 +
      """Initialisation du compte avec la valeur soldeInitial."""
 +
      # assignation de l'attribut d'instance solde
 +
      self.solde = float(soldeInitial)
 +
  # définition de la méthode NouveauSolde()
 +
  def NouveauSolde(self, somme):
 +
      """Nouveau solde de compte avec la valeur somme."""
 +
      self.solde = float(somme)
 +
  # définition de la méthode Solde()
 +
  def Solde(self):
 +
      """Retourne le solde."""
 +
      return self.solde
 +
  # définition de la méthode Credit()
 +
  def Credit(self, somme):
 +
      """Crédite le compte de la valeur somme. Retourne le solde."""
 +
      self.solde += somme
 +
      return self.solde
 +
  # définition de la méthode Debit()
 +
  def Debit(self, somme):
 +
      """Débite le compte de la valeur somme. Retourne le solde."""
 +
      self.solde -= somme
 +
      return self.solde
 +
  # définition de la méthode spéciale __add__ (surcharge de l'opérateur +)
 +
  def __add__(self, somme):
 +
      """x.__add__(somme) <=> x+somme
 +
      Crédite le compte de la valeur somme.
 +
      Affiche 'Nouveau solde : somme'"""
 +
      self.solde += somme
 +
      print("Nouveau solde : {:+.2f} €".format(self.solde))     
 +
      return self
 +
  # définition de la méthode spéciale __sub__ (surcharge de l'opérateur -)
 +
  def __sub__(self, somme):
 +
      """x.__sub_(somme) <=> x-somme
 +
      Débite le compte de la valeur somme.
 +
      Affiche 'Nouveau solde : somme'"""
 +
      self.solde -= somme
 +
      print("Nouveau solde : {:+.2f} €".format(self.solde))
 +
      return self
 +
if __name__ == '__main__':
 +
  # Ce bloc d'instructions est exécuté si le module est lancé en tant que programme autonome
 +
  # Instanciation de l'objet cb1 de la classe Compte
 +
  cb1 = Compte(1000)
 +
  # formatage des données pour afficher deux chiffres après la virgule et le signe
 +
  print("{:+.2f}".format(cb1.Solde()))
 +
  print("{:+.2f}".format(cb1.Credit(200)))
 +
  print("{:+.2f}".format(cb1.Debit(50.23)))
 +
  print("{:+.2f}".format(cb1.Solde()))
 +
  cb1.NouveauSolde(5100)
 +
  print("{:+.2f}".format(cb1.Solde()))
 +
  cb1+253.2
 +
  cb1-1000+100
 +
  cb1-cb1.Solde()
 +
</syntaxhighlight>
 +
* File → Save As
 +
* Répertoire : C:\PythonXX
 +
* Nom du fichier : CompteBancaire.py
 +
<syntaxhighlight lang="python" line='line'>
 +
>>>
 +
+1000.00
 +
+1200.00
 +
+1149.77
 +
+1149.77
 +
+5100.00
 +
Nouveau solde : +5353.20 €
 +
Nouveau solde : +4353.20 €
 +
Nouveau solde : +4453.20 €
 +
Nouveau solde : +0.00 €
 +
>>>
 +
</syntaxhighlight>
 +
</div>
 +
 +
== <font color=green>'''Affectation par références'''</font> ==
 +
<div style="width:50%; height:250px; top=0; right=10; overflow:auto; border:solid 1px black;">
 +
laVoitureDeMaFemme = maVoiture
 +
* Ici, je crée une nouvelle référence à un seul et même objet (moi et mon épouse n'avons qu'une voiture).
 +
* Ce n'est pas une instanciation !
 +
* Si je repeins ma voiture en vert la voiture de ma femme sera donc verte.<br>
 +
 +
{{:Python_ex_affectation_par_reference}}
 +
</div>
 +
 +
== <font color=green>'''Variables et méthodes de classe et d’instance'''</font> ==
 +
* Variables et méthodes d’instance
 +
** Chaque attribut est propre à sa classe, c'est une variable d’instance.
 +
** Une méthode qui reçoit en paramètre l’adresse de l’instance via la référence « self » est dite méthode d’instance.
 +
* Variables et méthodes de classe
 +
** Une variable commune à toutes les instances, par exemple le nombre de voitures est appelée variable de classe.
 +
** Une méthode qui ne reçoit pas en paramètre la référence « self » ne peut pas manipuler les variables d’instances. Elle a accès par contre aux variables de classe.
 +
=== <font color=Magenta>'''Exemple'''</font> ===
 +
<div style="width:50%; height:250px; top=0; right=10; overflow:auto; border:solid 1px black;">
 +
{{:Python_ex_varetmeth_class_instances}}
 +
</div>
 +
 +
== <font color=green>'''Gestion des erreurs'''</font> ==

Version actuelle datée du 12 novembre 2020 à 16:00

Array
Ft.png
(Opérateurs:Magenta)
(Méthodes:Green)
(Fonctions:Red)

11/01/2026

Perfectionnement

Introduction

  • Python est un langage de programmation inventé par Guido van Rossum. La première version de python est sortie en 1991.
    C'est un langage de programmation interprété, c'est-à-dire qu'il n'est pas nécessaire de le compiler avant de l'exécuter.

Les Objets

  • Pour pouvoir créer des objets dans un programme, il faut avant tout avoir défini une classe.
    • Il s'agit en quelque sorte d'un plan , qui décrit les caractéristiques de l'objet.
    • En particulier, une classe définit les deux éléments constitutifs des objets que sont ses attributs et fonctionnalités.
  • Un objet est une instance d'une classe, qui possède son propre état, défini par les valeurs de ses différents attributs.
  • On peut créer autant d'objets que l'on désire avec une classe.

Les attributs

  • Les attributs de classe permettent de stocker des informations au niveau de la classe. Elle sont similaires aux variables.
  • Il est possible à tout moment de créer un attribut pour l'objet.

Les méthodes

  • Les méthodes sont des fonctions définies dans une classe.
1  #!/usr/bin/python3
2  # coding: utf-8
3  class Voiture:
4     def __init__(self):
5         self.nom = "Ferrari"
6     def donne_moi_le_modele(self):
7         return "250"
>>> ma_voiture=Voiture()
>>> ma_voiture.donne_moi_le_modele()
'250'

Les propriétés

  • Il est de préférable de passer par des propriétés pour changer les valeurs des attributs.
  • Il existe une convention pour changer la valeur d'un attribut, de passer:
    • par des getter (ou accesseurs) en francais
    • des setter ( mutateurs )
 1  class Voiture(object):
 2     def __init__(self):
 3         self._roues=4
 4     def _get_roues(self):
 5         print("Récupération du nombre de roues")
 6         return self._roues
 7     def _set_roues(self, v):
 8         print("Changement du nombre de roues")
 9         self._roues  =  v
10     roues=property(_get_roues, _set_roues)
>>> ma_voiture=Voiture()
>>> ma_voiture.roues=5
Changement du nombre de roues
>>> ma_voiture.roues
Récupération du nombre de roues
5

Les décorateurs

 1  class Voiture(object):
 2     def __init__(self):
 3         self._roues=4
 4     @property
 5     def _get_roues(self):
 6         print "Récupération du nombre de roues"
 7         return self._roues
 8     @roues.setter
 9     def _set_roues(self, v):
10         print "Changement du nombre de roues"
11         self._roues  =  v
12     roues=property(_get_roues, _set_roues)

L'héritage de classe

  • Permet de créer de nouvelles classes mais avec une base existante.
1  class Voiture:
2     roues = 4
3     moteur = 1
4     def __init__(self):
5         self.nom = "A déterminer"
6  class VoitureSport(Voiture):
7     def __init__(self):
8         self.nom = "Ferrari"
  • On a indiqué que VoitureSport a hérité de classe Voiture, elle récupère toutes ses méthodes et ses attributs.

  • Instanciation de la classe voiture
>>> ma_voiture=Voiture()
>>> ma_voiture.nom
'A déterminer'
>>> ma_voiture.roues
4

  • Instanciation de la classe VoitureSport
>>> ma_voiture_sport=VoitureSport()
>>> ma_voiture_sport.nom
'Ferrari'
>>> ma_voiture_sport.roues
4
  • On parle de surcharge de méthode.

Classes et Instances

Class 01.png

  • Notion de classe (Class) d'objet est un type (type)
  • Elle comprend 2 parties: Attribut, Méthode
  • Une classe regroupe des fonctions et des attributs qui définissent un objet.
  • On appelle par ailleurs les fonctions d'une classe des " méthodes ".


 1 '''Définission d'une classe'''
 2 >>> class X:
 3          def __init__(self,val):
 4              self.attribut_1=val
 5          def methode_1(self):
 6              return self.attribut_1
 7 '''Instanciation'''
 8 >>> instance_1=X(3)
 9 '''Exécution d'une méthode'''
10 >>> print( instance_1.methode_1())
 => 3
  • Notion d'objet, d'instanciation et de constructeur
  • Une instance d'objet est un objet concret.
  • La création d'un objet est une instanciation.
  • La méthode qui la réalise est le constructeur.
  • La méthode __init__() est appelée lors de la création d'un objet.
  • self.attribut_1 est une manière de stocker une information dans la classe. On parle d'attribut de classe. Dans notre cas, on stocke le nom dans l'attribut attribut_1.

Classes et Modules

  • La classe est un concept de base de la programmation orientée objet.
  • En langage Python, on peut très bien écrire un script sans définir de classes.
    Cependant, On manipule forcément des objets (ou instances de classes):
    une variable entière est une instance de la classe int, une chaîne de caractères est une instance de la classe str...

Définition d'une classe

  • Exemple:
 1 #!/usr/bin/python3
 2 # -*- coding: utf-8 -*-
 3 # CompteBancaire.py
 4 # définition de la classe Compte
 5 class Compte:
 6    """Un exemple de classe :
 7    gestion d'un compte bancaire"""
 8    # définition de la méthode spéciale __init__
 9    def __init__(self, soldeInitial):
10       """Initialisation du compte avec la valeur soldeInitial."""
11       # assignation de l'attribut d'instance solde
12       self.solde = float(soldeInitial)
13    # définition de la méthode NouveauSolde()
14    def NouveauSolde(self, somme):
15       """Nouveau solde de compte avec la valeur somme."""
16       self.solde = float(somme)
17    # définition de la méthode Solde()
18    def Solde(self):
19       """Retourne le solde."""
20       return self.solde
21    # définition de la méthode Credit()
22    def Credit(self, somme):
23       """Crédite le compte de la valeur somme. Retourne le solde."""
24       self.solde += somme
25       return self.solde
26    # définition de la méthode Debit()
27    def Debit(self, somme):
28       """Débite le compte de la valeur somme. Retourne le solde."""
29       self.solde -= somme
30       return self.solde
31    # définition de la méthode spéciale __add__ (surcharge de l'opérateur +)
32    def __add__(self, somme):
33       """x.__add__(somme) <=> x+somme
34       Crédite le compte de la valeur somme.
35       Affiche 'Nouveau solde : somme'"""
36       self.solde += somme
37       print("Nouveau solde : {:+.2f} €".format(self.solde))      
38       return self
39    # définition de la méthode spéciale __sub__ (surcharge de l'opérateur -)
40    def __sub__(self, somme):
41       """x.__sub_(somme) <=> x-somme
42       Débite le compte de la valeur somme.
43       Affiche 'Nouveau solde : somme'"""
44       self.solde -= somme
45       print("Nouveau solde : {:+.2f} €".format(self.solde))
46       return self
47 if __name__ == '__main__':
48    # Ce bloc d'instructions est exécuté si le module est lancé en tant que programme autonome
49    # Instanciation de l'objet cb1 de la classe Compte
50    cb1 = Compte(1000)
51    # formatage des données pour afficher deux chiffres après la virgule et le signe
52    print("{:+.2f}".format(cb1.Solde()))
53    print("{:+.2f}".format(cb1.Credit(200)))
54    print("{:+.2f}".format(cb1.Debit(50.23)))
55    print("{:+.2f}".format(cb1.Solde()))
56    cb1.NouveauSolde(5100)
57    print("{:+.2f}".format(cb1.Solde()))
58    cb1+253.2
59    cb1-1000+100
60    cb1-cb1.Solde()
  • File → Save As
  • Répertoire : C:\PythonXX
  • Nom du fichier : CompteBancaire.py
 1 >>>
 2 +1000.00
 3 +1200.00
 4 +1149.77
 5 +1149.77
 6 +5100.00
 7 Nouveau solde : +5353.20 
 8 Nouveau solde : +4353.20 
 9 Nouveau solde : +4453.20 
10 Nouveau solde : +0.00 
11 >>>

Affectation par références

laVoitureDeMaFemme = maVoiture
  • Ici, je crée une nouvelle référence à un seul et même objet (moi et mon épouse n'avons qu'une voiture).
  • Ce n'est pas une instanciation !
  • Si je repeins ma voiture en vert la voiture de ma femme sera donc verte.
 1 >>> class Personne:
 2 ...       def __init__(self, age ):
 3 ...             self.age = age
 4 ...       def vieillir(self):
 5 ...             self.age += 1
 6 ...
 7 >>> docteurJekyll = Personne(40)
 8 >>> misterHyde = docteurJekyll
 9 >>> docteurJekyll.vieillir()
10 >>> print( misterHyde.age )
 => 41

Variables et méthodes de classe et d’instance

  • Variables et méthodes d’instance
    • Chaque attribut est propre à sa classe, c'est une variable d’instance.
    • Une méthode qui reçoit en paramètre l’adresse de l’instance via la référence « self » est dite méthode d’instance.
  • Variables et méthodes de classe
    • Une variable commune à toutes les instances, par exemple le nombre de voitures est appelée variable de classe.
    • Une méthode qui ne reçoit pas en paramètre la référence « self » ne peut pas manipuler les variables d’instances. Elle a accès par contre aux variables de classe.

Exemple

 1 >>> class X:
 2 ...     variable_de_classe = 5
 3 ...     def __init__(self, valeur ):
 4 ...             self.variable_d_instance = valeur
 5 ...     def methode_d_instance( self ):
 6 ...             self.variable_d_instance += 1
 7 ...     @classmethod
 8 ...     def methode_de_classe( cls ):
 9 ...             cls.variable_de_classe += 1
10 ...
11 >>> une_instance = X(3)
12 >>> une_instance.methode_d_instance()
13 >>> X.methode_de_classe()
14 >>> print( une_instance.variable_d_instance)
15 4
16 >>> print( X.variable_de_classe )
17 6
18 >>> print( une_instance.variable_de_classe )
19 6
20 >>> class X:
21 ...     variable_de_classe = 4.
22 ..     def methode_de_classe():
23 ...             print( X.variable_de_classe )
24 ... 
25 >>> X.methode_de_classe()
26 4

Gestion des erreurs