UVT : MASTER BADS
M 7
PYTHON
Les classes
Enseignante: Mme Lamia MANSOURI
Ann e universitaire: 2020-2021
1
1. Pr sentation des classes
D finition 1
Une classe est un ensemble incluant des attributs et des m thodes. Les attributs sont des
variables accessibles depuis toute m thode de la classe o elles sont d nies. En Python, les
classes sont des types modiables.
Les champs dune classe peuvent tre de type quelconque
Ils peuvent faire r f rence dinstances dautres classes
2
3
Syntaxe:
class nom_classe :
corps de la classe
...
Le corps dune classe peut tre vide, inclure des variables ou attributs, des fonctions ou m thodes.
Le mot-cl pass permet de pr ciser que le corps de la classe ne contient rien.
Exemple :
class classe_vide:
pass
Remarque
D finition 2 : instantiation
4
Une instance dune classe C d signe une variable de type C. Le terme instance ne
sapplique quaux variables dont le type est une classe.
Une instance de la classe est tout simplement un objet de cette classe.
Syntaxe:
C1=nom_classe()
2. Attributs et m thodes
Les attributs sont des variables qui sont associ es de mani re explicite une classe. Les attributs de
la classe se comportent comme des variables globales pour toutes les m thodes de cette classe.
Une m thode s crit comme une fonction dans le corps de la classe avec un premier param tre self
obligatoire, o self repr sente lobjet sur lequel la m thode sera appliqu e. Autrement dit self est la
r f rence dinstance.
La d claration dune m thode inclut toujours un param tre self de sorte que self.nom_attribut
d signe un attribut de la classe.
Nom_attribut seul d signerait une variable locale sans aucun rapport avec un attribut portant le
m me nom. Les attributs peuvent tre d clar s lint rieur de nimporte quelle m thode, voire
lext rieur de la classe elle-m me.
Appel dune m thode
class nom_classe :
def nom_methode (self, param_1, ..., param_n) :
self.nom_attribut = valeur
cl = nom_classe() # objet c1 qui est une instance de nom_classe
t = cl.nom_methode(valeur_1, ..., valeur_n)
5
Exemple
Publicité
class compte:
#gestion d'un compte bancaire
def crediter(self,x):
self.solde += x
def afficherSolde(self):
print("Le solde vaut :",self.solde)
monCompte=compte()
monCompte.nom = "comptePerso"
monCompte.numero = 666
monCompte.solde = 1000
6
3. Constructeur et destructeur
Constructeur
Le constructeur se d finit dans une classe comme une fonction avec deux particularit s :
le nom de la fonction doit tre __init__ ;
la fonction doit accepter au moins un param tre, dont le nom doit tre self, et qui doit tre le premier
param tre et ne doit pas retourner de r sultat
Le param tre self repr sente en fait l'objet cible, c'est- -dire que c'est une variable qui contient une
r f rence vers l'objet qui est en cours de cr ation. Gr ce ce dernier, on va pouvoir acc der aux attributs
et fonctionnalit s de l'objet cible.
class compte:
"""gestion d'un compte bancaire"""
def __init__(self,nom,numero,valeur):
self.nom = nom
self.numero = numero
self.solde = valeur
def afficherSolde(self):
print("Le solde vaut :",self.solde)
monCompte = compte(" comptepro",777,10000)
monCompte.afficherSolde()
7
Destructeur
Pour lib rer la m moire dun objet que lon nutilise plus, on va rajouter nos classes une m thode particuli re :
un destructeur.
En Python, son nom est impos : __del__.
Il pourra galement servir mettre jour certains attributs de classes, comme par exemple un compteur dobjets
instanci s.
On ne fait quasiment jamais dappel explicite la m thode __del__. Elle est appel e automatiquement quand
un objet cesse d tre r f renc (comme par exemple si lon cr e une instance dans une fonction ou proc dure).
La syntaxe de la d claration de la m thode __del__ est la m me que celle des autres m thodes :
class nomDeLaClasse:
#documentation de la classe
def __init__(self,para1,para2,...):
...
def __del__(self):
...
def methode1(self,para1,para2,...):
...
8
D finition des classes dans des modules
On a toujours int r t d finir les classes dans des modules (pas obligatoire). On peut avoir
plusieurs classes dans un module. Ex. ModuleCompte.py
Publicité
Contenu du module ModuleCompte.py
Le programme principal
class compte:
#gestion d'un compte bancaire
def __init__(self,nom,numero,solde):
self.nom = nom
self.numero = numero
self.solde = solde
def crediter(self,x):
self.solde += x
def afficherSolde(self):
print("Le solde vaut :",self.solde)
import ModuleCompte as MC
#instanciation
monCompte= MC.compte('moncompte personel',666,1000)
print(monCompte.nom)
monCompte.crediter(2000)
monCompte.afficherSolde()
"
Il faut dabord importer le module contenant la
classe, nous lui attribuons lalias MC ici
" Pour la cr ation de linstance c, nous
sp cifions le module puis le nom de la classe
" print(dir(c)) :affiche tous les membres de c
9
4. lh ritage
10
Lh ritage permet de construire une hi rarchie de classes. Les classes h riti res h ritent
des champs et m thodes de la classe anc tre.
Ce m canisme n cessite des efforts de mod lisation et de conception. Mais au final, on
am liore la lisibilit et la r utilisabilit du code.
La classe Employe est une Personne, avec le champ
suppl mentaire prime.
Cela va n cessiter la reprogrammation des m thodes saisie()
et affichage(). On peut ventuellement ajouter dautres
m thodes sp cifiques Employe.
D claration en Python:
class classeMere:
#une classe m re
...
class classeFille(classeMere):
#une classe fille h ritant de la classe m re
...
11
Constructeur de la classe fille
On devra respecter une r gle fondamentale : le constructeur de la classe fille doit faire un appel
explicite au constructeur de la classe m re afin dinitialiser les attributs h rit s de celle-ci.
Pour cela on aura deux syntaxes notre disposition:
Dans la premi re syntaxe possible, on fait pr c der __init__ du nom de la classe m re :
class classeFille(classeMere):
#documentation de la classe fille
def __init__(self,para1,para2,...):
Publicité
classeMere.__init__(self,para1,...)
...
Dans la seconde syntaxe autoris e, on fait pr c der __init__ du mot cl super() :
class classeFille(classeMere):
#documentation de la classe fille
def __init__(self,para1,para2,...):
super().__init__(para1,...)
H ritage multiple
12
L'h ritage multiple est la possibilit pour une classe de poss der plusieurs classes m res.
Comme pour un h ritage simple, la classe fille poss de les attributs et les m thodes de ses classes
m res plus dautres qui lui sont propres.
class mere1:
...
class mere2:
...
class classeFille(mere1,mere2,...):
...
On devra respecter une r gle fondamentale : le constructeur de la classe fille doit faire un appel explicite au
constructeur des classes m res afin dinitialiser les attributs h rit s de celles-ci :
class classeFille(mere1,mere2,...):
def __init__(self,para1,para2,...):
mere1.__init__(self,para1,...)
mere2.__init__(self,para1,...)
Exemple
13
class carnivore:
def __init__(self,p):
self._poidsViande = p
def devorer(self):
print("Je mange",self._poidsViande,"kilos de viande par jour")
class herbivore:
def __init__(self,p):
self._poidsHerbe = p
def brouter(self):
print("Je mange",self._poidsHerbe,"kilos dherbe par jour")
class omnivore(carnivore,herbivore):
def __init__(self,pv,ph,h):
carnivore.__init__(self,pv)
herbivore.__init__(self,ph)
self.__humain = h
o = omnivore(10,5,False)
o.devorer()
o.brouter()
5. Surcharge des m thodes
14
class Personne:
def __init__(self):
self.nom = ""
self.age = 0
self.salaire = 0.0
ModulePersonne.py
Publicité
def saisie(self):
self.nom = input("Nom : ")
self.age = int(input("Age : "))
self.salaire = float(input("Salaire : "))
def affichage(self):
print("Son nom est ", self.nom)
print("Son ge : ", self.age)
print("Son salaire : ", self.salaire)
class Employe(Personne):
def __init__(self):
Personne.__init__(self)
self.prime = 0.0
def saisie(self):
Personne.saisie(self)
self.prime = float(input("Prime : "))
def affichage(self):
Personne.affichage(self)
print("Sa prime : ", self.prime)
Le programme principal
-- coding: utf --
#appel du module
import ModulePersonne as MP
#instanciation
e = MP.Employe()
#saisie
e.saisie()
print(" Affichage ")
e.affichage()
6. La gestion des collections dobjets
15
-- coding: utf --
#appel du module
import ModulePersonne as MP
#liste vide
liste = []
n = int(input("Nb de pers : "))
#saisie liste
for i in range(0,n):
a = MP.Personne()
a.saisie()
liste.append(a)
#affichage
print(" d but affichage ")
for p in liste:
print("-------")
p.affichage()
Cr er lobjet r f renc par
a, effectuer la saisie. Ajouter
la r f rence dans la liste.
Le typage est automatique, p est
bien de type Personne.