Les classes sont un autre type de donnée qui est le cœur de la programmation orienté objet avec Python.
Une classe est avant tout un « moule » qui va nous permettre de crée des objets similaires mais ayant des attributs différents : les instances.
Création de classe
La syntaxe pour déclarer une classe est relativement simple :
- On commence par le nom « class »
- Puis le nom de la classe, la convention veut que le nom d’une classe commence par une majuscule.
- Ensuite « : »
- Puis on défini les attribues de la classe. Les attribues de classe peuvent être tout un tas de chose, notamment, des variables ou des fonctions.
Concrètement :
class Ma_Classe:
attribue_1 = "Jouet"
attribue_2 = "Rouge"
attribue_3 = "Bois"
Récupérer l’attribut d’une classe
Pour récuper la valeur d’un attribut d’une classe, on appel la classe, puis l’attribut de cette façon :
class Ma_Classe:
attribue_1 = "Jouet"
attribue_2 = "Rouge"
attribue_3 = "Bois"
print(Ma_Classe.attribue_1)
>>> Jouet
Créer des instances et gérer les attributs
Les bases de la création d’instance
Pour créer une instance simple est identique à l’objet défini lors de la création de la classe, il suffit de choisir un nom pour cette instance puis de dire à Python que ce nom est égale au nom de la classe suivi de parenthèses :
class Jouet:
forme = "rond"
couleur = "rouge"
matiere = "bois"
Jouet_001 = Jouet()
print(Jouet_001.forme)
>>> rond
Attributs de classe
Dès lors que l’on commence à manipuler les classes, il faut différencier des attributs de classe des attributs d’instance.
Voyons d’abord les attributs de classe. Il s’agit ici tout simplement de modifier les attributs « directement » dans la classes, sans modification des instances, ces instances auront donc des attributs hérités de leur classe.
Dans l’exemple ci-dessous, les instances héritent de la modification de l’attributs de classe :
class Jouet:
forme = "rond"
couleur = "rouge"
matiere = "bois"
Jouet_001 = Jouet()
Jouet_002 = Jouet()
Jouet.forme = "carré"
print(Jouet_001.forme)
print(Jouet_002.forme)
>>> carré
>>> carré
Attributs d’instance
Néanmoins il est possible de spécifier des attributs directement au niveau de l’instance et indépendamment des attributs de la classe.
Dans l’exemple ci-dessous on modifie l’attribut forme pour chaque instance, on parle alors d’attribut d’instance :
class Jouet:
forme = "rond"
couleur = "rouge"
matiere = "bois"
Jouet_001 = Jouet()
Jouet_002 = Jouet()
Jouet.forme = "carré"
Jouet_001.forme = "oval"
Jouet_002.forme = "losange"
print(Jouet_001.forme)
print(Jouet_002.forme)
>>> oval
>>> losange
Initialisation d’instances
Comm dit au tout début de cet article, une classe est avant tout un « moule » pour crée des objets similaire. A tel point que lors de la création de la classe, en théorie il ne faut pas crée d’objet mais uniquement le modèle des futurs objets.
Les objets, les instances seront crée à la volé en utilisant la classe crée et grace à la technique d’initialisation d’instances.
Pour cela à l’intérieur de la classe nous devons définir une fonction qui va initialiser les attributs de chaque instance, la syntaxe est la suivante :
class Jouet:
def __init__(self, couleur, forme):
self.attrib_couleur = couleur
self.attrib_forme = forme
Jouet_001 = Jouet("rouge", "rond")
En langage courant, on pourrait traduire ce code par : Pour la classe Jouet, initialiser les attributs couleur et forme.
L’argument « self » sert simplement à récupérer le nom que l’on donne à l’instance. C’est un raccourci pour éviter de devoir redonner le nom de l’instance.
Dans l’exemple ci dessus, dès que l’on va vouloir lire ou écrire l’attributs « .attrib_couleur », Python va remplacer automatiquement le « self » par le nom de l’instance que l’on est en train de manipuler.
NOTE : En cas d’arguments multiple comme ci dessous, c’est l’ordre des argument lors de la création de l’instance qui determine l’enregistrement des attributs.
Modifier un attribut initialisé
Pas de différence majeur en comparaison à la modification d’un attribut crée dans la technique d’initialisation. Néanmoins, noter qu’il faut connaitre le nom des attributs dans la classe :
class Jouet:
def __init__(self, color, forme, matiere):
self.attrib_color = color
self.attrib_forme = forme
self.attrib_matiere = matiere
def show_color(self):
print(f"Le jouet est {self.attrib_color}")
Jouet_001 = Jouet("rouge", "rond", "bois")
Jouet_001.attrib_color = "bleu"
Jouet_001.show_color()
>>> Le jouet est bleu
Création de méthode de classe
Les méthodes de classe sont des « actions » que l’on peut définir est appeler au sein d’une classe.
La méthode la plus basique étant un print lié à un attribut d’une instances :
class Jouet:
def __init__(self, color, forme, matiere):
self.attrib_color = color
self.attrib_forme = forme
self.attrib_matiere = matiere
def show_color(self):
print(f"Le jouet est {self.attrib_color}")
def show_shape(self):
print(f"Le jouet est {self.attrib_forme}")
def show_matiere(self):
print(f"Le jouet est en {self.attrib_matiere}")
def overview(self):
print(f"Il s'agit d'un jouet {self.attrib_color}, de forme {self.attrib_forme} en {self.attrib_matiere}")
Jouet_001 = Jouet("rouge", "rond", "bois")
Jouet_002 = Jouet("bleu", "carré", "plastique")
Jouet_001.show_color()
Jouet_001.show_shape()
Jouet_001.show_matiere()
Jouet_002.overview()
>>> Le jouet est rouge
>>> Le jouet est rond
>>> Le jouet est en bois
>>> Il s'agit d'un jouet bleu, de forme carré en plastique
0 commentaire