Vous êtes sur la page 1sur 39

Toutes les variables sont des

objets qui appartiennent à


des classes
L’idée de base de la programmation orientée objet consiste en effet à
regrouper dans un même ensemble (l’objet), à la fois un certain nombre de
données (ce sont les attributs d’instance), et les algorithmes destinés à
effectuer divers traitements sur ces données (ce sont les méthodes, à savoir
des fonctions particulières encapsulées dans l’objet).

Objet = [ attributs + méthodes ]

Cette façon d’associer dans une même « capsule » les propriétés d’un objet et
les fonctions qui permettent d’agir sur elles, correspond chez les concepteurs
de programmes à une volonté de construire des entités informatiques dont le
comportement se rapproche du comportement des objets du monde réel qui
nous entoure.
Les classes sont les principaux outils de la programmation orientée objet
(Object Oriented Programming ou OOP).
Ce type de programmation permet de structurer les logiciels complexes en
les organisant comme des ensembles d’objets qui interagissent, entre eux
et avec le monde extérieur.

Le premier bénéfice de cette approche de la programmation réside dans


le fait que les différents objets utilisés peuvent être construits
indépendamment les uns des autres. Ce résultat est obtenu grâce au
concept d’encapsulation : la fonctionnalité interne de l’objet et les
variables qu’il utilise pour effectuer son travail, sont en quelque sorte
«enfermées» dans l’objet. Les autres objets et le monde extérieur ne
peuvent y avoir accès qu’à travers des procédures bien définies:
l’interface de l’objet.
Un second bénéfice résultant de l’utilisation des classes est la possibilité
qu’elles offrent de construire de nouveaux objets à partir d’objets
préexistants. Cela est rendu possible grâce aux concepts de dérivation et
de polymorphisme :

• l’héritage ou La dérivation est le mécanisme qui permet de construire


une classe « enfant » au départ d’une classe « parente ». L’enfant ainsi
obtenu hérite toutes les propriétés et toute la fonctionnalité de son
ancêtre, auxquelles on peut ajouter ce que l’on veut.

• Le polymorphisme permet d’attribuer des comportements différents à


des objets dérivant les uns des autres, ou au même objet ou en fonction
d’un certain contexte.
Pour créer une nouvelle classe d’objets Python, on utilise l’instruction class.

class point: class point(object): object est l’ancetre de


pass toutes les classes

p=point()

# p est un objet qui apparient à la classe point ou une instance de la classe point
Méthode constructeur: création d’une instance __init__()
Une méthode constructeur a ceci de particulier qu’elle est exécutée
automatiquement lorsque l’on instancie un nouvel objet a partir de la
classe. On peut donc y placer tout ce qui semble nécessaire pour
initialiser automatiquement l’objet que l’on crée (les attributs avec
éventuellement les valeurs par défaut).
La methode constructeur est une méthode spéciale (méthode prédéfinie),
elle devra obligatoirement s’appeler __init__ .

Cette méthode a comme paramètre self: l’objet ou l’instance


Ce paramètre self est nécessaire, parce qu’il faut pouvoir designer
l’instance à laquelle la méthode sera associée, dans les instructions
faisant partie de sa définition
Ici, les valeurs des attributs des instances (self) sont donnés par défaut, mais il est
possible de les modifier à posteriori

La méthode init a pour but de déclarer les attributs et


sera automatiquement appelée au moment de la
création de chaque objet

Self qui indique l’objet et est un paramètre par défaut, il


est ajouté sans qu’on le spécifie dans l’appel
Les valeurs des attributs donnés par l’utilisateur lors
de la création de l’objet ou instanciation de la classe
2 façons équivalentes d’invoquer une méthode
d’une classe via un objet appartenant à cette classe

Quand on appelle la méthode à partir de la classe, on doit préciser de quelle


instance il s’agit

Alors que quad on appelle la méthode à partir de l’instance, il n’est pas


nécessaire de préciser l’instance self est automatiquement ajoutée
Le changement
au niveau d’une
variable de
classe affecte
tous les objets
La variable de classe a la même
valeur pour tous les objets

Ici, La variable de classe est


différente puisqu’à chaque
création d’un nouvel objet, elle
est incrémentée de 1.
class Employee:
rate=1.04
def __init__(self,name,pay):
self.name=name
self.pay=pay
def raisePay(self):
retunr (self.pay * self.rate)

E1 = Employee('john', 6000)
E2 = Employee('jack', 10000)

print("Employee ", Employee.rate)


print("E1 ", E1.rate)
print("E2 ", E2.rate)

E1.rate=1.05
print("after modification of E1.rate")
print("Emplyee ", Employee.rate)
print("E1 ", E1.rate)
print("E2 ", E2.rate)
Espaces de noms des classes et instances

• Chaque classe possède son propre espace de noms. Les variables qui en
font partie sont appelées variables de classe ou attributs de classe.

• Chaque objet instance (crée a partir d’une classe) obtient son propre
espace de noms. Les variables qui en font partie sont appelées variables
d’instance ou attributs d’instance.

• Les classes peuvent utiliser (mais pas modifier) les variables définies au
niveau principal.

• Les instances peuvent utiliser (mais pas modifier) les variables définies au
niveau de la classe et les variables définies au niveau principal.
Méthode d’instance agit sur les
objets
Donc pour appeler ce type de
méthodes, il faut d’abord créer
des objets.

Instance method has self as


parameter, it manipulates the
object, two types of instance
methods:
If you want to work with instances
use self as parameter

If you want to work with classes


use class (cls) as parameter

You have to put a decorator


before a class method:
@classmethod
If you do not want
to work with
instances or classes,
you can use static
method

You have to put a


decorator before a
static method
Avec la
méthode
statique, on peut
l’utiliser avec
une classe ou un
objet

Puisqu’elle est
indépendante
Méthodes Spéciales
__méthode__()

Les méthodes spéciales permettent


de créer un comportement de
classes comme un comportement
des types builtin (chaines, tuples,
listes…)
Plus de 80 méthodes spéciales:
https://docs.python.org/3/reference/datamodel.html#specialnames
Setters: méthodes pour l’écriture, la modification,
Getters: méthodes pour la lecture, la recherche
L’utilisation des setters et getters signifie que les attributs concernés
vont devenir protégés ou privés

self.attribut ………public

self._attribut …….protégé (pas visible de l’extérieur de la classe)

self.__attribut ….. Privé (pas visible par les sous-classes)

_ ou __ avec la fonction property rend la manipulation de la


variable qu’à travers les getter et les setter

On ne peut la changer qu’à travers le setter et l’afficher qu’à


travers le getter
La syntaxe de la fonction property, à l’intérieur de la classe
attribut=property(getter, setter, deleter, helper)

Les 2 premiers paramètres sont utilisés pour contrôler la saisie et


l’affichage, le troisième pour contrôler la suppression de l’objet
et le quatrième pour afficher la documentation de la classe.
Si je supprime l’instruction :

La modification et l’affichage ne vont plus passer par les setter et getter et


vont être exécutées dynamiquement.

L’exécution donne:
Property
existe en tant
que fonction

et en tant
que
décorateur
d’attributs.
https://docs.python.org/3/library/functions.html#property

Vous aimerez peut-être aussi