Attributs privés
Définition : Attribut privé
Un attribut privé est un attribut inaccessible en dehors des méthodes de la classe.
Exemple :
L'attribut surface permet de mémoriser la surface du cercle. Au départ, cet attribut est initialisé à -1, et dès l'appel de la méthode surface, il est initialisé.
"""
Exemple de l'utilisation d'un
attribut privé
"""
import numpy as np
class Cercle:
"""
Classe Cercle définie par son centre et son rayon
"""
_nb_cercle = 0 # champ static utilisé pour compter le nombre d'objet cercle
def __init__(self, x, y, r=1):
"""
définition du cercle à partir
de l'abscisse et de l'ordonnée du centre et
de son rayon
Argument:
x -- abscisse du centre
y -- ordonnée du centre
r -- rayon
"""
self.centre = (x, y)
self.rayon = r
Cercle._nb_cercle += 1
self.__surface = -1
def surface(self):
"""
Calcul la surface du cercle
return : surface du cercle
"""
if self.__surface < 0:
self.__surface = np.pi * self.rayon * self.rayon
return self.__surface
if __name__ == '__main__':
c1 = Cercle(0, 0)
c2 = Cercle(2, 1, 3)
c3 = Cercle(-1, 1, 3)
print("Nombre d'objets Cercle : ", Cercle._nb_cercle)
print("La surface du Cercle de centre ",
c2.centre, ' et de rayon ',
c2.rayon, ' est : ', c2.surface())
Si la commande suivante print(c3.__surface) est entrée dans python alors le message d'erreur s'affiche :
AttributeError: 'Cercle' object has no attribute '__surface'
Exemple : Encapsulation
Dans l'exemple précédent,une modification du rayon a pour conséquence que la valeur de surface devient fausse.
Pour éviter cela, on peut rendre privé l'attribut rayon et le modifier en utilisant une nouvelle méthode
"""
Exemple de l'utilisation d'une
variable static pour compter
le nombre d'objets
"""
import numpy as np
class Cercle:
"""
Classe Cercle définie par son centre et son rayon
"""
_nb_cercle = 0 # utiliser pour compter le nombre d'objet cercle
def __init__(self, x, y, r=1):
"""
définition du cercle à partir
de l'abscisse et de l'ordonnée du centre et
de son rayon
Argument:
x -- abscisse du centre
y -- ordonnée du centre
r -- rayon
"""
self.centre = (x, y)
self.__rayon = r
Cercle._nb_cercle += 1
self.__surface = -1
def setRayon(self, r):
if r == None:
return self.__rayon
self.__rayon = r
self.__surface = -1
return self.__rayon
def getRayon(self):
return self.__rayon
def surface(self):
"""
Calcul la surface du cercle
return : surface du cercle
"""
if self.__surface < 0:
self.__surface = np.pi * self.__rayon * self.__rayon
return self.__surface
if __name__ == '__main__':
c1 = Cercle(0, 0)
print("La surface du Cercle de centre ",
c1.centre, ' et de rayon ',
c1.getRayon(), ' est : ', c1.surface())
c1.setRayon(2)
print("La surface du Cercle de centre ",
c1.centre, ' et de rayon ',
c1.getRayon(), ' est : ', c1.surface())
Le résultat du programme précédent est :
La surface du Cercle de centre (0, 0) et de rayon 1 est : 3.141592653589793
La surface du Cercle de centre (0, 0) et de rayon 2 est : 12.566370614359172
Les méthodes getRayon et setRayon sont appelées mutateur (Getters and Setters). Ces méthodes permettent d'accéder ou de modifier un attribut privé.