💻nsi

Comprendre la POO en Python rapidement | NSI Terminale

20 juillet 2026 7 min de lecture

La programmation orientée objet (POO) est un concept clé en NSI, surtout en terminale. Pas de panique : avec une bonne méthode, tu vas rapidement comprendre comment créer tes propres classes et objets en Python. Cet article te guide pas à pas, avec des exemples concrets et des astuces pour le bac.

Qu'est-ce que la programmation orientée objet ?

La POO est un paradigme de programmation qui organise le code autour d'objets, qui sont des instances de classes. Une classe définit un modèle (attributs et méthodes), et un objet est une réalisation concrète de ce modèle. Par exemple, une classe Voiture peut avoir des attributs comme marque, couleur, et des méthodes comme demarrer(). Chaque objet ma_voiture aura ses propres valeurs.

Créer une classe en Python

En Python, on définit une classe avec le mot-clé class. Voici un exemple simple :

class Etudiant:
    def __init__(self, nom, note):
        self.nom = nom
        self.note = note
    
    def afficher(self):
        print(f"{self.nom} a {self.note}/20")

# Création d'un objet
eleve1 = Etudiant("Alice", 18)
eleve1.afficher()  # Alice a 18/20

La méthode __init__ est le constructeur : elle est appelée automatiquement lors de la création d'un objet. Le paramètre self représente l'instance elle-même.

Attributs et méthodes

Les attributs sont des variables liées à l'objet, les méthodes sont des fonctions qui agissent sur l'objet. On y accède avec la notation pointée : objet.attribut ou objet.methode().

Attributs de classe vs attributs d'instance

Un attribut défini directement dans la classe (hors de __init__) est partagé par toutes les instances. Exemple :

class Chien:
    espece = "Canis familiaris"  # attribut de classe
    def __init__(self, nom):
        self.nom = nom          # attribut d'instance

Si tu modifies Chien.espece, cela affecte tous les chiens. Mais si tu modifies mon_chien.espece, cela crée un attribut d'instance qui cache celui de la classe.

Héritage : réutiliser du code

L'héritage permet de créer une classe fille à partir d'une classe mère. La fille hérite de tous les attributs et méthodes, et peut les redéfinir (polymorphisme). Exemple :

class Animal:
    def __init__(self, nom):
        self.nom = nom
    def parler(self):
        pass

class Chat(Animal):
    def parler(self):
        return "Miaou"

class Chien(Animal):
    def parler(self):
        return "Wouf"

animaux = [Chat("Minou"), Chien("Rex")]
for a in animaux:
    print(a.parler())  # Miaou, Wouf

Ici, la méthode parler est redéfinie dans chaque sous-classe. C'est un exemple de polymorphisme.

Encapsulation et propriétés

L'encapsulation consiste à protéger les attributs en les rendant privés (convention : préfixe _ ou __). On utilise des propriétés avec @property pour contrôler l'accès :

class CompteBancaire:
    def __init__(self, solde):
        self._solde = solde
    
    @property
    def solde(self):
        return self._solde
    
    @solde.setter
    def solde(self, valeur):
        if valeur >= 0:
            self._solde = valeur
        else:
            print("Solde invalide")

compte = CompteBancaire(100)
print(compte.solde)  # 100
compte.solde = -50   # Solde invalide

Les propriétés permettent d'ajouter de la logique sans casser l'interface.

Cas d'usage concret : un jeu de rôle simple

Imaginons un jeu avec des personnages. On peut créer une classe Personnage avec des points de vie et des attaques. Puis des classes filles Guerrier et Mage qui héritent et spécialisent :

class Personnage:
    def __init__(self, nom, pv):
        self.nom = nom
        self.pv = pv
    def attaquer(self, cible):
        cible.pv -= 10
        print(f"{self.nom} attaque {cible.nom}, il reste {cible.pv} PV")

class Guerrier(Personnage):
    def attaquer(self, cible):
        cible.pv -= 20
        print(f"{self.nom} donne un coup d'épée, il reste {cible.pv} PV")

class Mage(Personnage):
    def attaquer(self, cible):
        cible.pv -= 15
        print(f"{self.nom} lance une boule de feu, il reste {cible.pv} PV")

hero = Guerrier("Conan", 100)
enemi = Mage("Sauron", 80)
hero.attaquer(enemi)  # Conan donne un coup d'épée, il reste 60 PV

Cet exemple illustre l'héritage et le polymorphisme, deux piliers de la POO.

Conseils pour le bac NSI

À l'épreuve de NSI, tu peux être amené à lire ou écrire du code POO. Voici quelques conseils :

  • Maîtrise la syntaxe : class, __init__, self, héritage.
  • Entraîne-toi à créer des classes simples (ex: Livre, CompteBancaire).
  • Comprends les diagrammes de classes UML (non exigé mais utile).
  • Révise les notions d'encapsulation et de propriétés.
  • Fais des exercices sur nsi-lycee.fr/exercices.
  • Si tu bloques, consulte les cours en ligne ou la section sur les erreurs Python.

Erreurs fréquentes à éviter

Voici quelques pièges classiques :

  • Oublier self dans les méthodes : Python lève une erreur.
  • Confondre attribut de classe et d'instance : les modifications peuvent avoir des effets de bord.
  • Ne pas appeler super().__init__() dans l'héritage si la classe mère a un constructeur.
  • Utiliser des attributs privés sans propriétés : mieux vaut les exposer via des getters/setters.

Pour approfondir, n'hésite pas à consulter des ressources complémentaires comme AlloBac ou AlloLycée.

Conclusion

La POO en Python n'est pas si complexe : c'est une façon de structurer son code pour le rendre plus modulaire et réutilisable. Avec de la pratique, tu verras que c'est un outil puissant pour tes projets en NSI. Continue à coder, et n'oublie pas de t'entraîner sur nsi-lycee.fr/exercices !

📚 Pour aller plus loin

Questions fréquentes

Qu'est-ce que la POO en Python ?

La POO (programmation orientée objet) est un paradigme qui organise le code autour d'objets, instances de classes. Une classe définit des attributs et méthodes, et un objet est une instance concrète.

Comment créer une classe en Python ?

On utilise le mot-clé class suivi du nom de la classe. Exemple : class MaClasse: def __init__(self): pass

Quelle est la différence entre attribut de classe et attribut d'instance ?

Un attribut de classe est partagé par toutes les instances et défini directement dans la classe. Un attribut d'instance est propre à chaque objet et défini dans __init__ avec self.

Comment fonctionne l'héritage en Python ?

L'héritage permet à une classe fille d'hériter des attributs et méthodes de la classe mère. On écrit class Fille(Mere): et on peut redéfinir des méthodes (polymorphisme).

Qu'est-ce que l'encapsulation en POO ?

L'encapsulation consiste à protéger les attributs en les rendant privés (convention _ ou __) et à contrôler l'accès via des méthodes getter/setter ou des propriétés @property.

Pourquoi utiliser la POO en NSI ?

La POO permet de structurer le code, de le rendre plus lisible, réutilisable et facile à maintenir. C'est une notion centrale au programme de terminale NSI et souvent évaluée au bac.

Quels sont les pièges à éviter avec self en Python ?

Oublier self en paramètre d'une méthode est une erreur fréquente. self représente l'instance courante et doit être le premier paramètre de toute méthode d'instance.

Bravo ! Tu as lu cet article
Inscris-toi pour sauvegarder ta progression et gagner des XP
Creer mon compte
POO Python NSIclasses objets Python terminaleprogrammation orientée objetNSI terminalePython POO
Pixel