Un objet en Python ressemble à un objet réel, à quelque chose que vous pouvez voir, toucher.
Prenez par exemple la porte d'entrée de votre maison. Elle a quelques caractéristiques : sa taille, sa couleur, sa composition (est-ce une porte en métal ou en bois ?), etc.
De même, un objet en Python possède ce que l'on appellera des <italique>attributs</italique> : ce seront des variables qui seront <italique>encapsulées</italique> dans l'objet : l'objet les amènera avec lui partout où il va, parce que ses attributs font partie de lui-même.
Si notre porte se résumait à une couleur, une taille et une composition, elle ne servirait à rien n'est-ce pas ? Une porte d'entrée, ça s'ouvre, ça se ferme, ça se ferme à clé la nuit ou quand vous êtes parti de chez vous. En fermant à clé votre porte, vous allez en quelque sorte faire accomplir quelques actions à cette porte : se refermer, tourner le verrou. C'est la même chose en Python : chaque objet peut contenir des fonctions (appelées <italique>méthodes</italique>) qui pourront accomplir des actions diverses.

Pour récapituler, un objet possèdes des <italique>attributs</italique> qui définissent ses caractéristiques et des <italique>méthodes</italique> qui lui permettent d'effectuer des actions.
Un attribut est comparable à une variable interne à l'objet, de même qu'une méthode est comparable à une fonction.

Une classe est une sorte d'usine à objets. Ainsi, notre classe <police nom="optima">Porte</police> va pouvoir créer autant d'objets de type <police nom="optima">Porte</police> que nous le voulons. Selon ce que l'on a spécifié à notre usine, les objets sortant de l'usine auront ou non les mêmes attributs et les mêmes méthodes.

En pratique, on dit que notre usine à portes est une <italique>classe</italique>, que lorsqu'on veut créer une nouvelle porte on <italique>instancie</italique> un nouvel objet de type <police nom="optima">Porte</police>.