Programmation Orienté ObjetEtudier et modifier une classe
Objectifs
Nous appris à créer et utiliser une instance à partir d'une classe. Il est temps de voir comment construire une classe.
Pour faire comprendre comment construire une classe, nous allons reprendre et modifier la classe sorcier
.
Etude de la classe Sorcier
La classe sorcier a été défini ainsi.
class Sorcier:
def __init__(self):
self.nom = ""
self.prenom = ""
self.age = 0
self.__sorts = []
def apprendre(self, sort):
if not sort in self._sorts:
self._sorts.append(sort)
def lancer(self, sort):
if not sort in self._sorts:
print(f"{self.prenom} ne connait pas le sort {sort}")
else:
print(f"{self.prenom} lance le sort {sort}")
Pour déclarer une classe dans le langage python, on utilise le mot clé
On remarque que le nom d'une classe débute par
Quand on initialise une classe, par exemple avec le code sorcier = Sorcier()
c'est la méthode
Le constructeur
La méthode __init__
est appelée le constructeur. Elle prend en paramètre l'instance de la classe, qui est nommé par convention
A partir de là, tous les attributs de l'objet sont préfixés par le mot clé self
. C'est ce qui permet d'attacher les données à l'instance. Ainsi après sa déclaration, les données liées à une instance seront toujours accéssible. Ou presque ...
Constructeur & paramètres
Si l'on veut créer un sorcier qui a pour attributs
On doit :
- créer l'instance
- affecter
Potter à l'attibutnom - affecter
Harry à l'attibutprenom - affecter
11 à l'attibutage
Ce qui donne :
sorcier = Sorcier()
sorcier.nom = "Potter"
sorcier.prenom = "Harry"
sorcier.age = 11
Ce n'est pas vraiment pratique, mais on peut améliorer cela.
Il est possible d'ajouter des paramètes au constructeur, ce qui permet de renseigner la valeur des attributs. Pour cela, modifie le constructeur en ajoutant les paramètres voulus
class Sorcier:
def __init__(self, nom, prenom, age = 10):
self.nom = nom
self.prenom = prenom
self.age = age
self.__sorts = []
...
Maintenant, nous pouvons passer les arguments lors de notre déclaration de classe et la création du sorcier précédent devient simplement :
Par exemple : Pour créer un sorcier qui a pour attribut 11
.
sorcier = Sorcier("Potter","Harry",11)
Créer une instance nommée sorcier_2
qui s'appelle Hermione Granger et qui est agé de 10 ans. (Hermione est son prénom)
Vérifions que sorcier_2
soit correctement instancié. Pour cela essayons de récupérer son âge.
Acceder aux attibuts.
Dans la définition de la classe, les attributs sont déclarés comme des variables sauf qu'ils sont préfixés par le mot cle age
, on utilise
Déclaration d'une méthode
Dans la définition de la classe, on crée les méthodes que l'objet pourra appeller. Comme pour les fonctions, la définition d'une méthode commence par le mot clé
Compléter le code ci-dessous pour que les sorciers puissent se présenter à l'aide d'une
Exemple d'utilisation :
sorcier_2.presentation()
>>> Je m'appelle Hermione, j'ai 10 ans
On rappelle que la classe
class Sorcier:
def __init__(self, nom, prenom, age):
self.nom = ""
self.prenom = ""
self.age = 0
self.__sorts = []
La première ligne de notre méthode présentation sera
La seconde ligne, contiendra :
print(f"Je m'appelle {
Bravo ! Tu viens de créer ta première méthode.
Voici où en est notre classe Sorcier
Il reste à implémenter les méthodes apprendre
et lancer
.
class Sorcier:
def __init__(self, nom, prenom, age = 10):
self.nom = nom
self.prenom = prenom
self.age = age
self.__sorts = []
def presentation(self):
print(f"Je m'appelle {self.prenom}, j'ai {self.age}.")