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

Laisser un commentaire