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
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.
fido.abbaia()
# équivalent à Cane.abbaia(fido)
# Python passe fido comme self automatiquementAttributs d'instance vs de classe
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
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
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()`.
Afficher l'indice
math.sqrt(self.x ** 2 + self.y ** 2)
Solution disponible après 3 tentatives
Exercice de révision
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`.
Afficher l'indice
self.balance += amount dans deposit.
Solution disponible après 3 tentatives
Défi supplémentaire
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()`.
Afficher l'indice
N'oubliez pas d'utiliser self pour accéder aux attributs dans area(self).
Solution disponible après 3 tentatives