Programmation orientée objet : classes Python – attributs, méthodes et instantiation

Page 1 sur 15Lecteur de document UniversityLib

Programmation orientée objet : classes Python – attributs, méthodes et instantiation

Programming, Python, Object-Oriented Programming · course

Voir tous les documents en programmation

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.