![Fichier:Python logo and wordmark.svg — Wikipédia](https://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Python_logo_and_wordmark.svg/1200px-Python_logo_and_wordmark.svg.png)
Dans la programmation procédurale, comme le C, une suite de fonctions (appelées aussi procédures ou routines) est définie, fonctions pouvant être appelées dans l'ordre que l'on souhaite pour traiter des données en local.
Contrairement à la programmation procédurale, la POO (OOP en anglais) ne définit pas de procédures. Elle construit des objets pour les faire interagir entre eux. Un objet est défini par une classe (une catégorie), des variables d'instance (attributs), et des méthodes (fonctions).
Par exemple, si nous construisons une voiture nous pouvons la définir comme suit :
De la même façon, si nous avons construit un objet "maison" avec un garage, nous pourrons les faire interagir entre eux en définissant, par exemple, que le garage reçoit l'information "bip ouverture" et ouvre la porte. L'objet voiture pourra alors avancer (seule puisque c'est une Tesla) à la réception de l'information "pas d'obstacle" (ex : `if front_captor == 0: move(forward)`). Enfin, le garage pourra se fermer après réception du signal "voiture rentrée".
Une classe est tout simplement déclarée par *"class ClassName:"*, puis les méthodes et attributs associés (indentés). Selon les bonnes pratiques, le nom de la classe doit être attaché, sans tiret, avec une majuscule à chaque mot.
Il est possible de délcarer des attributs de classe :
```python
class Demo:
var = 1
print(Demo.var)
>>> 1
```
> **Attention** : ici nous parlons bien d'un attribut de **classe** et non d'objet. Pour les attributs d'objet, rendez-vous au chapitre suivant sur le constructeur.