Explication de la leçon
Après cette leçon, tu seras capable de :
self.Si tu as déjà utilisé des classes en Java ou en C#, l'idée de base en Python te sera familière : une classe définit un type d'objet, et une instance est un objet particulier issu de cette classe. Python utilise un deux-points et l'indentation plutôt que des accolades :
class Server:
passPour le moment, pass fournit à la classe un corps valide et vide. Crée un objet en appelant le nom de la classe : server = Server(). Tu peux attacher des champs, appelés attributs, directement à cette instance avec la notation pointée : server.region = "eu". Deux instances peuvent contenir des valeurs différentes sans s'affecter mutuellement.
Une méthode est une fonction écrite à l'intérieur d'une classe. Une méthode d'instance déclare self comme son premier paramètre. Lorsque tu appelles server.label(), Python passe server pour self automatiquement. À l'intérieur de la méthode, self.region désigne la région de l'objet particulier recevant l'appel. Les méthodes peuvent également mettre à jour les attributs d'instance.
Pour cette première leçon, nous affectons les attributs après avoir créé chaque objet afin que tu puisses voir clairement le modèle objet. Dans la leçon suivante, __init__ montrera comment initialiser les attributs lors de la création d'un objet. Nous aborderons les attributs de classe et l'héritage plus tard.
Une classe vide suffit pour créer des instances et attacher des valeurs différentes à chacune d'elles.
class Endpoint:
pass
public = Endpoint()
public.path = "/public"
internal = Endpoint()
internal.path = "/internal"
print(public.path)
print(internal.path)Sortie :
/public
/internalLes deux attributs path appartiennent à des objets différents.
La même méthode peut renvoyer un résultat différent pour chaque instance car self fait référence à l'objet qui l'a appelée.
class Printer:
def label(self):
return f"{self.name} ({self.region})"
first = Printer()
first.name = "labels"
first.region = "eu"
print(first.label())Sortie :
labels (eu)La méthode utilise les attributs attachés à first.
Une méthode peut modifier un attribut via self. Cette modification reste associée à cet objet.
class Counter:
def record(self):
self.total += 1
counter = Counter()
counter.total = 0
counter.record()
counter.record()
print(f"Total: {counter.total}")Sortie :
Total: 2L'attribut total a été créé avant que record() ne l'utilise. La leçon suivante rendra cette configuration plus fiable.
| Objectif | Python |
|---|---|
| Définir une classe | class Worker: |
| Conserver un corps vide valide | pass |
| Créer une instance | worker = Worker() |
| Affecter un attribut d'instance | worker.name = "api" |
| Lire un attribut | worker.name |
| Définir une méthode d'instance | def label(self): |
| Utiliser l'objet appelant à l'intérieur d'une méthode | self.name |
self dans une méthode : les méthodes d'instance normales en ont besoin comme premier paramètre.self.name, et non simplement name, pour lire l'attribut de cette instance.first.status ne modifie pas second.status.AttributeError.