Passer au contenu principal
eLearner.app
Module 7 · Leçon 1 sur 425/36 dans le cours~14 min
Leçons du module (1/4)

Classes et instances

Une classe est un plan de conception pour créer des objets qui possèdent des données (attributs) et des comportements (méthodes). Une instance est un objet concret créé à partir de la classe.

Syntaxe minimale

Python
class Cane:
    def __init__(self, nome, eta):
        self.nome = nome
        self.eta = eta

    def abbaia(self):
        return f"{self.nome} dice WOOF!"

# création d'instances
fido = Cane("Fido", 3)
luna = Cane("Luna", 5)

fido.nome       # 'Fido'
fido.abbaia()   # 'Fido dice WOOF!'

__init__ : le "constructeur"

Le méthode __init__ est appelé automatiquement lorsque vous créez une instance (Cane("Fido", 3)). Il sert à initialiser les attributs.

Techniquement, ce n'est pas un constructeur (l'objet a déjà été créé par __new__), mais c'est l'endroit où vous définissez l'état initial.

self : le premier paramètre

self est la référence à l'instance sur laquelle la méthode a été appelée. C'est une convention (pas un mot-clé) et c'est toujours le premier paramètre des méthodes d'instance.

Python
fido.abbaia()
# équivalent à Cane.abbaia(fido)
# Python passe fido comme self automatiquement

Attributs d'instance vs de classe

Python
class Cane:
    specie = "Canis familiaris"   # attribut de CLASSE (partagé)

    def __init__(self, nome):
        self.nome = nome           # attribut d'INSTANCE (pour chacun)

fido = Cane("Fido")
luna = Cane("Luna")

fido.nome       # 'Fido'        (instance)
luna.nome       # 'Luna'        (instance)
fido.specie     # 'Canis familiaris'  (recherché sur la classe)
Cane.specie     # 'Canis familiaris'

Méthodes multiples et état

Python
class Contatore:
    def __init__(self, inizio=0):
        self.valore = inizio

    def incrementa(self, di=1):
        self.valore += di

    def reset(self):
        self.valore = 0

c = Contatore()
c.incrementa()
c.incrementa(di=5)
c.valore       # 6
c.reset()
c.valore       # 0

À vous de jouer

Exercice#python.m7.l1.e1
Tentatives : 0Chargement…

Définissez une classe `Point` avec __init__(self, x, y) qui stocke les attributs. Ajoutez une méthode `distance_from_origin` qui renvoie la racine carrée de x^2 + y^2. Créez `p = Point(3, 4)` et évaluez `p.distance_from_origin()`.

Chargement de l'éditeur…
Afficher l'indice

math.sqrt(self.x ** 2 + self.y ** 2)

Solution disponible après 3 tentatives

Exercice de révision

Exercice#python.m7.l1.e2
Tentatives : 0Chargement…

Définissez `BankAccount` avec __init__(self, balance=0) et les méthodes `deposit(amount)`, `withdraw(amount)` qui modifient self.balance. Créez `a = BankAccount(100)`, déposez 50, retirez 30. Évaluez `a.balance`.

Chargement de l'éditeur…
Afficher l'indice

self.balance += amount dans deposit.

Solution disponible après 3 tentatives

Défi supplémentaire

Exercice#python.m7.l1.e3
Tentatives : 0Chargement…

Définissez une classe `Rectangle` avec un constructeur `__init__(self, width, height)` pour définir la largeur et la hauteur, et une méthode `area(self)` qui renvoie le produit de la largeur et de la hauteur. Instanciez un rectangle avec une largeur de `4` et une hauteur de `5` en le stockant dans `rect`, et évaluez `rect.area()`.

Chargement de l'éditeur…
Afficher l'indice

N'oubliez pas d'utiliser self pour accéder aux attributs dans area(self).

Solution disponible après 3 tentatives