0% ont trouvé ce document utile (0 vote)
8 vues47 pages

Python S2

Le document présente les concepts fondamentaux de la programmation en Python, y compris les fonctions lambda, les méthodes map, filter et reduce, ainsi que la gestion des erreurs. Il aborde également la programmation orientée objet (POO), y compris les classes, objets, encapsulation, héritage et polymorphisme. Enfin, il traite des méthodes spéciales et de la manipulation de données structurées.

Transféré par

nidal
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
8 vues47 pages

Python S2

Le document présente les concepts fondamentaux de la programmation en Python, y compris les fonctions lambda, les méthodes map, filter et reduce, ainsi que la gestion des erreurs. Il aborde également la programmation orientée objet (POO), y compris les classes, objets, encapsulation, héritage et polymorphisme. Enfin, il traite des méthodes spéciales et de la manipulation de données structurées.

Transféré par

nidal
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Partie 01: fonction lambda

2.1 Qu'est-ce qu'une fonction lambda ?

Définition : Fonction anonyme (sans nom) définie Composants :


en une seule ligne.
• lambda : mot-clé,
Analogie :Fonction normale = recette complète
• paramètres : variables d'entrée (comme dans une
dans un cahier
fonction)
Lambda = post-it avec formule rapide
• : : deux-points
2.2 Comparaison fonction normale vs lambda (voir
• expression : ce qui est calculé et retourné
le code)
PARTIE 3 : MAP, FILTER, REDUCE
PARTIE 3 : MAP, FILTER, REDUCE

3.1 map() - Transformer chaque élément 3.2 filter() - Garder certains éléments

Définition : Applique une fonction à tous les Garde seulement les éléments pour lesquels la
éléments d'une liste. fonction retourne True.

Syntaxe : Syntaxe :
PARTIE 3 : MAP, FILTER, REDUCE

3.3 reduce() - Accumuler/Réduire

Définition : Réduit une liste à une seule valeur en appliquant une fonction de
façon cumulative.

Important : Nécessite l'import du module functools.


PARTIE 4 : GESTION D'ERREURS (BASES)

4.1 Pourquoi gérer les erreurs ?

Sans gestion d'erreurs :

Avec gestion d’erreur


PARTIE 4 : GESTION D'ERREURS (BASES)

4.2 Structure try/except, Syntaxe de base :

Avec gestion d’erreur

Voir les exemples sur thonny


PARTIE 4 : GESTION D'ERREURS (BASES)

4.4 Erreurs Python courantes


PARTIE 5 : MANIPULATION DE DONNÉES
STRUCTURÉES

5.1 Structure : Liste de dictionnaires

En analyse de données, on travaille souvent avec des tableaux représentés par des listes de
dictionnaires.

Exemple : Base d'étudiants

Structure :

• Chaque dictionnaire = une ligne (un étudiant)

• Chaque clé = une colonne (nom, age, notes)


5.2 Opérations courantes

1. Extraire une colonne 3. Calculer des statistiques

2. Filtrer les données


5.2 Opérations courantes

4. Ajouter une colonne calculée 5. Trier les données


SÉANCE 1 : POO - PARTIE 1 (FONDAMENTAUX)
1. INTRODUCTION À LA POO

1.1 Définition 1.3 Avantages de la POO

La Programmation Orientée Objet (POO) est un •Modularité : Code organisé en unités logiques
paradigme de programmation qui organise le code autour
d'objets plutôt que de fonctions et de procédures.
•Réutilisabilité : Les classes peuvent être utilisées
dans différents contextes
1.2 Concepts fondamentaux

•Maintenabilité : Modifications localisées et


•Classe : Modèle abstrait définissant la structure et le
comportement d'objets
impact limité

•Objet : Instance concrète d'une classe •Abstraction : Masquage de la complexité interne

•Attribut : Variable appartenant à un objet

•Méthode: Fonction appartenant à une classe


2. CLASSES ET OBJETS

2.1 Définition d'une classe

Syntaxe générale :

Convention : Nom en PascalCase (ex: MaClasse, VoitureElectrique)


2. CLASSES ET OBJETS

2.2 Distinction classe/objet


3. ATTRIBUTS

3.1 Attributs d'instance 3.1 Attributs d'instance

Les attributs d'instance sont propres à chaque Méthode 2 : Utilisation du constructeur


objet. (recommandée)

Méthode 1 : Affectation directe (déconseillée)


3. ATTRIBUTS

3.2 Le constructeur __init__

• Méthode spéciale appelée automatiquement


lors de la création d'un objet

• Initialise les attributs de l'instance

• Premier paramètre toujours self


3. ATTRIBUTS

3.3 Le paramètre self

• Référence à l'instance courante

• Permet d'accéder aux attributs et méthodes de


l'objet

• Passé automatiquement par Python (ne pas


l'inclure lors de l'appel)
3. ATTRIBUTS
4. MÉTHODES

4.1 Définition 4.2 Méthodes d'instance

Une méthode est une fonction définie à


l'intérieur d'une classe et qui opère sur les
attributs de l'objet.

Syntaxe :
4. MÉTHODES

4.3 Méthodes avec retour de valeur 4.2 Méthodes d'instance


Exercice 1
Classe Produit

Créez une classe Produit avec :

• Attributs : nom, prix, quantite

Méthodes :

• ajouter_stock(quantite) : ajoute au stock

• vendre(quantite) : retire du stock si possible

• valeur_stock() : retourne prix × quantité


SÉANCE 02 : POO - PARTIE 2
(ENCAPSULATION)
1. RAPPEL SÉANCE 01
1.1 Code sans encapsulation

Problèmes :

• Aucun contrôle sur les modifications

• Données incohérentes possibles

• Violation des règles métier


2. L'ENCAPSULATION
2.1 Définition 2.2 Avantages

L'encapsulation est un principe • Sécurité : Contrôle des valeurs


affectées
fondamental de la POO qui consiste à :

• Maintenance : Modification de
• Cacher les détails d'implémentation
l'implémentation sans impact externe

• Protéger les données contre les • Cohérence : Garantie de l'intégrité des


modifications non contrôlées données

• Exposer une interface publique pour • Abstraction : Simplification de


interagir avec l'objet l'utilisation
3. ATTRIBUTS PRIVÉS ET PROTÉGÉS
3.1 Conventions de nommage en Python

Python n'a pas de véritables attributs privés, mais utilise des conventions :

3.2 Attributs publics


3. ATTRIBUTS PRIVÉS ET PROTÉGÉS
3.3 Attributs protégés (un underscore _) 3.4 Attributs privés (double underscore _ _)

Convention : _attribut indique "utilisez cet Name Mangling : Python renomme _ _solde en
attribut avec précaution, c'est interne à la classe" _CompteBancaire_ _solde en interne
4. GETTERS ET SETTERS
4.1 Définition et Rôle

Avant d'aborder la syntaxe, il faut comprendre pourquoi on utilise des getters et des setters. Considérons le
problème suivant :

La solution : utiliser des getters et des setters pour contrôler l'accès aux attributs.

💡 Règle générale :Un getter permet de lire la valeur d'un attribut privé.Un setter permet de modifier la valeur d'un
attribut privé avec validation
4. GETTERS ET SETTERS
4.1 Définition et Rôle

Avant d'aborder la syntaxe, il faut comprendre pourquoi on utilise des getters et des setters. Considérons le
problème suivant :

La solution : utiliser des getters et des setters pour contrôler l'accès aux attributs.

💡 Règle générale :Un getter permet de lire la valeur d'un attribut privé.Un setter permet de modifier la valeur d'un
attribut privé avec validation
4. GETTERS ET SETTERS
4.2 Méthodes d'accès classiques (style Java)

La première approche consiste à créer des méthodes get_xxx() et set_xxx() manuellement.


4. GETTERS ET SETTERS
4.2 Méthodes d'accès classiques (style Java)

**Ce qui se passe en mémoire :**


4. GETTERS ET SETTERS
4.4 Propriétés calculées (read-only)

Certaines propriétés se calculent à partir d'autres attributs. On définit uniquement un getter, sans setter.
4. GETTERS ET SETTERS
4.4 Propriétés calculées (read-only)

💡 Avantage : On ne stocke pas aire et perimetre en mémoire. Elles sont recalculées à chaque accès, donc toujours à
jour.
4. GETTERS ET SETTERS
4.5 Récapitulatif : Quand utiliser quoi ?

À RETENIR

• @property transforme une méthode en attribut


intelligent

• @[Link] ajoute la validation lors de l'écriture

• Sans setter → lecture seule (propriété calculée)

• La syntaxe reste naturelle : [Link] au lieu


de objet.get_attribut()
Exercices

Exercice 1 : Classe Temperature Exercice 2 : Classe DateNaissance


Créez une classe Temperature avec : Créez une classe DateNaissance avec :
•Attribut privé __celsius • Attributs privés : __jour, __mois, __annee
•Propriété celsius avec validation (≥ -273.15) • Validation : date valide (jour entre 1-31, mois
•Propriété calculée fahrenheit (lecture et écriture) entre 1-12, année entre 1900-2024)
•Propriété calculée kelvin (lecture et écriture) • Propriété calculée age (année actuelle - année de
Contraintes : naissance)
•Température minimale : -273.15°C (zéro absolu) • Méthode est_majeur() retournant True si age ≥
•Conversions :
•F = C × 9/5 + 32
•K = C + 273.15
SÉANCE 03 : HÉRITAGE
3.1 Qu'est-ce que l'héritage ?

L'héritage est l'un des piliers de la POO. Il permet à une classe enfant (sous-classe) de réutiliser les attributs et
méthodes d'une classe parent (super-classe), et de les étendre ou modifier selon les besoins.

💡 Syntaxe de base
class Enfant(Parent): # Enfant hérite de Parent
pass
Avantages de l'héritage

• Réutilisation du code (DRY : Don't Repeat Yourself)

• Organisation hiérarchique des classes

• Facilite la maintenance et l'évolution du code


3.2 Héritage simple – Exemple complet
Créons une classe Animal puis des classes Chien et Chat qui en héritent :

class Animal:
def __init__(self, nom, age):
[Link] = nom
[Link] = age

def respirer(self):
print(f"{[Link]} respire.")

def dormir(self):
print(f"{[Link]} dort.")

class Chien(Animal): # Chien hérite d'Animal


def aboyer(self):
print(f"{[Link]} dit : Ouaf !")

class Chat(Animal): # Chat hérite d'Animal


def miauler(self):
print(f"{[Link]} dit : Miaou !")

# Utilisation
rex = Chien("Rex", 3)
[Link]() # hérité → Rex respire.
[Link]() # propre à Chien → Rex dit : Ouaf !

mimi = Chat("Mimi", 5)
[Link]() # hérité → Mimi dort.
3.3 super() et les constructeurs

Lorsqu'une classe enfant définit son propre __init__, il faut appeler super().__init__(...) pour initialiser les
attributs du parent.
class Animal:
def __init__(self, nom, age):
[Link] = nom
[Link] = age

class Chien(Animal):
def __init__(self, nom, age, race):
super().__init__(nom, age) # appel du constructeur parent
[Link] = race # attribut spécifique à Chien

def presentation(self):
print(f"{[Link]} ({[Link]}), {[Link]} ans")

rex = Chien("Rex", 3, "Berger Allemand")


[Link]() # Rex (Berger Allemand), 3 ans

⚠️ Règle importante
Sans super().__init__(), les attributs du parent ne sont pas initialisés.
Cela causera des AttributeError dès que vous tenterez d'y accéder.
3.4 Redéfinition de méthodes (Override)

La redéfinition permet à la classe enfant de fournir sa


class Animal:
propre implémentation d'une méthode héritée. def parler(self):
print("L'animal fait un bruit.")
Résumé : Parent vs Enfant class Chien(Animal):
def parler(self): # redéfinition
print("Ouaf !")
Situation Méthode appelée Résultat
class Chat(Animal):
Pas de Méthode du parent Comportement par def parler(self): # redéfinition
redéfinition (héritée) défaut print("Miaou !")
Redéfinition Méthode de l'enfant Comportement
sans super() uniquement remplacé animaux = [Animal(), Chien(), Chat()]
for a in animaux:
Redéfinition Parent puis enfant Comportement étendu [Link]()
avec super() # L'animal fait un bruit.
# Ouaf !
# Miaou !
🧪 TP Séance 3 — Animal → Chien & Chat

Énoncé du TP Étape 3 – Classe Chat

• Hérite d'Animal
Étape 1 – Classe Animal (base)
• Attribut supplémentaire : interieur (bool)
• Attributs : nom (str), age (int), poids (float)
• Méthodes : miauler(), ronronner(), description()
• Méthodes : description(), respirer(),
redéfinie
manger(aliment)
Étape 4 – Programme principal
Étape 2 – Classe Chien
• Créer une liste d'animaux mixte (Chien, Chat, Animal)
• Hérite d'Animal
• Afficher la description de chaque animal
• Attribut supplémentaire : race (str)
(polymorphisme !)
• Méthodes : aboyer(), chercher_balle(),
• Tester isinstance() pour identifier chaque type
description() redéfinie
Séance 4 — Polymorphisme & Méthodes Spéciales
4.1 Polymorphisme

Le polymorphisme permet d'appeler la même


méthode sur des objets de types différents — class Animal:
def parler(self): pass
chacun répondant à sa façon. En Python, cela class Chien(Animal):
def parler(self): return "Ouaf !"
fonctionne naturellement grâce au duck typing : peu
class Chat(Animal):
importe la classe, si l'objet a la méthode, ça marche. def parler(self): return "Miaou !"

class Vache(Animal):
def parler(self): return "Meuh !"

animaux = [Chien(), Chat(), Vache()]

for animal in animaux: # même interface →


comportements différents
print([Link]())
# Ouaf !
# Miaou !
# Meuh !
4.1 Polymorphisme

Polymorphisme sans héritage (Duck Typing)

class Robot:
def parler(self):
return "Bip bip !"

# Robot n'hérite pas d'Animal, mais fonctionne dans la


même boucle !
for obj in [Chien(), Chat(), Robot()]:
print([Link]())
4.2 Méthodes spéciales : __str__ et __repr__

Les méthodes spéciales (ou méthodes magiques) entourées de class Animal:


def __init__(self, nom, age):
doubles underscores permettent à vos objets d'interagir avec [Link] = nom
[Link] = age
les fonctions Python natives.
def __str__(self):
Méthode Déclenchée par Usage return f"Animal : {[Link]}, {[Link]} ans"
__str__ str(obj) / Affichage lisible (utilisateur)
def __repr__(self):
print(obj)
return f"Animal(nom='{[Link]}',
__repr__ repr(obj) / Représentation technique age={[Link]})"
console (développeur)
__len__ len(obj) Taille / longueur de l'objet def __len__(self):
return [Link] # durée de vie en années

a = Animal("Rex", 5)
print(a) # Animal : Rex, 5 ans (via __str__)
print(repr(a)) # Animal(nom='Rex', age=5) (via
__repr__)
print(len(a)) # 5 (via __len__)
4.3 Surcharge d'opérateurs

Python permet de redéfinir le comportement des opérateurs (+, -, *, ==, <, >, …) pour vos propres classes.

Opérateur Méthode spéciale Expression déclenchante


+ __add__(self, other) a+b
- __sub__(self, other) a-b
* __mul__(self, other) a*b
/ __truediv__(self, other) a / b
== __eq__(self, other) a == b
< __lt__(self, other) a<b
> __gt__(self, other) a>b
TP Séance 4 — Classe Fraction

L'objectif est de créer une classe Fraction qui représente une Étape 3 – Opérations arithmétiques
fraction mathématique p/q et qui supporte toutes les opérations • __add__ : addition de deux fractions
arithmétiques courantes.
• __sub__ : soustraction

Étape 1 – Constructeur et validation • __mul__ : multiplication

• Attributs : numerateur (int), denominateur (int) • __truediv__ : division

• Vérifier que le dénominateur n'est pas 0 (lever ValueError) Étape 4 – Comparaisons


• Simplifier automatiquement la fraction avec pgcd • __eq__ : égalité (1/2 == 2/4 → True)

Étape 2 – Méthodes spéciales de représentation • __lt__ : plus petit que

• __str__ → "3/4" • __gt__ : plus grand que

• __repr__ → "Fraction(3, 4)"

Vous aimerez peut-être aussi