Tout d’abord, qu’est-ce qu’un objet ? En introduction, nous avons dit qu’un objet avait des propriétés et pouvait être manipulé par des opérations, c’est bien beau tout ça mais qu’est-ce que ça peut bien vouloir dire concrétement ?
En introduction, nous avons décrit un objet comme une valeur possédant des propriétés et manipulée par des opérations.
Concrètement, un objet est constitué de 3 caractéristiques :
- Un type, qui identifie le rôle de l’objet (
int
,str
etlist
sont des exemples de types d’objets) ; - Des attributs, qui sont les propriétés de l’objet ;
- Des méthodes, les opérations qui s’appliquent sur l’objet.
Pour vous éclairer, prenons le code suivant :
1 2 3 4 5 6 7 | >>> number = 5 # On instancie une variable `number` de type `int` >>> number.numerator # `numerator` est un attribut de `number` 5 >>> values = [] # Variable `values` de type `list` >>> values.append(number) # `append` est une méthode de `values` >>> values [5] |
Toute valeur en Python est donc un objet.
Il a une drôle de tête ce type-là
Ainsi, tout objet est associé à un type. Un type définit la sémantique d’un objet.
On sait par exemple que les objets de type int
sont des nombres entiers, que l’on peut les additionner, les soustraire, etc.
Pour la suite de ce cours, nous utiliserons un type User
représentant un utilisateur sur un quelconque logiciel.
Nous pouvons créer ce nouveau type à l’aide du code suivant :
1 2 | class User: pass |
Nous reviendrons sur ce code par la suite, retenez simplement que nous avons maintenant à notre disposition un type User
.
Pour créer un objet de type User
, il nous suffit de procéder ainsi :
1 | john = User() |
On dit alors que john
est une instance de User
.
Montre-moi tes attributs
Ensuite, nous avons dit qu’un objet était constitué d’attributs. Ces derniers représentent des valeurs propres à l’objet.
Nos objets de type User
pourraient par exemple contenir un identifiant (id
), un nom (name
) et un mot de passe (password
).
En Python, nous pouvons facilement associer des valeurs à nos objets :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class User: pass # Instanciation d'un objet de type User john = User() # Définition d'attributs pour cet objet john.id = 1 john.name = 'john' john.password = '12345' print('Bonjour, je suis {}.'.format(john.name)) print('Mon id est le {}.'.format(john.id)) print('Mon mot de passe est {}.'.format(john.password)) |
Le code ci-dessus affiche :
1 2 3 | Bonjour, je suis john. Mon id est le 1. Mon mot de passe est 12345. |
Nous avons instancié un objet nommé john
, de type User
, auquel nous avons attribué trois attributs. Puis nous avons affiché les valeurs de ces attributs.
Notez que l’on peut redéfinir la valeur d’un attribut, et qu’un attribut peut aussi être supprimé à l’aide de l’opérateur del
.
1 2 3 4 5 6 7 8 | >>> john.password = 'mot de passe plus sécurisé !' >>> john.password 'mot de passe plus sécurisé !' >>> del john.password >>> john.password Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'User' object has no attribute 'password' |
Il est généralement déconseillé de nommer une valeur de la même manière qu’une fonction built-in.
On évitera par exemple d’avoir une variable id
, type
ou list
.
Dans le cas d’un attribut, cela n’est pas gênant car ne fait pas partie du même espace de noms.
En effet, john.id
n’entre pas en conflit avec id
.
Discours de la méthode
Enfin, les méthodes sont les opérations applicables sur les objets. Ce sont en fait des fonctions qui recoivent notre objet en premier paramètre.
Nos objets User
ne contiennent pas encore de méthode, nous découvrirons comment en ajouter dans le chapitre suivant.
Mais nous pouvons déjà imaginer une méthode check_pwd
(check password) pour vérifier qu’un mot de passe entré correspond bien au mot de passe de notre utilisateur.
1 2 | def user_check_pwd(user, password): return user.password == password |
1 2 3 4 | >>> user_check_pwd(john, 'toto') False >>> user_check_pwd(john, '12345') True |
Les méthodes recevant l’objet en paramètre, elles peuvent en lire et modifier les attributs.
Souvenez-vous par exemple de la méthode append
des listes, qui permet d’insérer un nouvel élément, elle modifie bien la liste en question.
À travers cette partie nous avons défini et exploré la notion d’objet.
Un terme a pourtant été omis, le terme « classe ». Il s’agit en Python d’un synonyme de « type ». Un objet étant le fruit d’une classe, il est temps de nous intéresser à cette dernière et à sa construction.