Définir une classe, c'est définir un nouveau type.
Un exemple
On veut définir un type "Point" qui représentera des points du plan.
On propose pour cela le code suivant (quelques commentaires suivront) :
class Point:
def __init__(self, nom, abscisse, ordonnee):
"""
Constructeur.
"""
self.nom = nom
self.x = abscisse # abscisse du point
self.y = ordonnee # ordonnée du point
def translate(self, ux, uy):
"""
Méthode de translation du point par le vecteur u(ux;uy).
"""
self.x += ux
self.y += uy
def distance(self, autrePoint):
"""
Renvoie la distance du point à un autre point.
"""
dx = self.x - autrePoint.x
dy = self.y - autrePoint.y
return (dx**2 + dy**2)**0.5
def rayon(self):
"""
Méthode renvoyant le rayon polaire du point
(longueur du segment d'extrémités l'origine du repère et le point).
"""
return self.distance(Point("O",0,0))
def affichage(self):
print("Le point {} a pour coordonnées ({};{}).".format(self.nom, self.x, self.y))
if __name__ == "__main__":
a = Point('A', 2, 3)
b = Point('B', 4, 5)
print("L'abscisse du point A est égale à {}.".format(a.x))
print("Distance entre les points A et B : {}.".format(a.distance(b)))
print("Rayon polaire du point A : {}.".format(a.rayon()))
a.affichage()
print("\nTranslation du point A par le vecteur (10;10) :")
a.translate(10,10)
a.affichage()
On obtient :
L'abscisse du point A est égale à 2. Distance entre les points A et B : 2.8284271247461903. Rayon polaire du point A : 3.605551275463989. Le point A a pour coordonnées (2;3). Translation du point A par le vecteur (10;10) : Le point A a pour coordonnées (12;13).
- Le code définissant la classe Point a défini un nouveau type, c'est à dire le modèle d'objets.
- Le code
a = Point('A', 2, 3)
(ligne 36) définit une instance de la classe Point, c'est à dire un objet de type Point. -
a.nom
,a.x
eta.y
sont les attributs nom, x, et y de l'objet a. Ils ont pour valeurs initiales celles données dans le codea = Point('A', 2, 3)
: a.nom = 'A', a.x = 2, a.y = 3. - Les fonctions définies sont appelées méthodes. Ainsi
a.affichage()
appelle la méthode affichage() sur l'objet a. Dans le code définissant la classe, on litdef affichage(self):
, le paramètreself
désigne l'objet avec lequel on appelera la méthode. Dans l'appela.affiche()
, c'est donca
qui est associé àself
et joue donc le rôle du premier paramètre. L'instructiona.affiche()
pourrait d'ailleurs aussi s'écrirePoint.affichage(a)
. - De même, vous pouvez tester le code
Point.distance(a,b)
et constater qu'il est équivalent au codea.distance(b)
. - Le mot
self
pour représenter l'instance en cours de définition pourrait être remplacé par un autre mot (mais l'usage est d'utiliser self). Par contre la présence, en première position, d'un paramètre désignant l'instance en cours de définition est obligaoire. - Remarquez que la fonction translate ne renvoie rien : elle agit directement sur les attributs du point (et elle pourrait aussi éventuellement renvoyer une valeur).