{"id":47112,"date":"2021-07-05T13:39:21","date_gmt":"2021-07-05T11:39:21","guid":{"rendered":"https:\/\/kinsta.com\/?p=97958"},"modified":"2023-08-22T13:12:28","modified_gmt":"2023-08-22T12:12:28","slug":"programmation-orientee-objet-python","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/","title":{"rendered":"Guide du d\u00e9butant pour la programmation orient\u00e9e objet (POO) dans Python"},"content":{"rendered":"<p>La programmation est un art. Et comme dans l&rsquo;art, le choix des pinceaux et des peintures appropri\u00e9s est essentiel pour produire les meilleures \u0153uvres. La programmation orient\u00e9e objet de Python est l&rsquo;une de ces comp\u00e9tences.<\/p>\n<p>Le choix du <a href=\"https:\/\/kinsta.com\/fr\/blog\/meilleur-langage-programmation-apprendre\/\">bon langage de programmation<\/a> est un \u00e9l\u00e9ment crucial de tout projet. Il peut conduire soit \u00e0 un d\u00e9veloppement fluide et agr\u00e9able, soit \u00e0 un v\u00e9ritable cauchemar. Il serait donc pr\u00e9f\u00e9rable que vous utilisiez le langage le mieux adapt\u00e9 \u00e0 votre cas d&rsquo;utilisation.<\/p>\n<p>C&rsquo;est la principale raison d&rsquo;apprendre la programmation orient\u00e9e objet dans Python, qui est aussi l&rsquo;un des langages de programmation les plus populaires.<\/p>\n<p>Apprenons !<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Un exemple de programme Python<\/h2>\n<p>Avant d&rsquo;entrer dans le vif du sujet, posons une question : avez-vous d\u00e9j\u00e0 \u00e9crit un programme Python comme celui qui suit ?<\/p>\n<pre><code class=\"language-python\">secret_number = 20\n \nwhile True:\n   number = input('Guess the number: ')\n \n   try:\n       number = int(number)\n   except:\n       print('Sorry that is not a number')\n       continue\n \n   if number != secret_number:\n       if number &gt; secret_number:\n           print(number, 'is greater than the secret number')\n \n       elif number &lt; secret_number:\n           print(number, 'is less than the secret number')\n   else:\n       print('You guessed the number:', secret_number)\n       break\n<\/code><\/pre>\n<p>Ce code est un simple devineur de nombres. Essayez de le copier dans un fichier Python et de l&rsquo;ex\u00e9cuter dans votre syst\u00e8me. Il remplit parfaitement son r\u00f4le.<\/p>\n<p>Mais voici un \u00e9norme probl\u00e8me : que se passerait-il si nous vous demandions d&rsquo;impl\u00e9menter une <a href=\"https:\/\/kinsta.com\/fr\/changelog\/\">nouvelle fonctionnalit\u00e9<\/a> ? Cela pourrait \u00eatre quelque chose de simple &#8211; par exemple :<\/p>\n<p>\u00ab\u00a0Si l&rsquo;entr\u00e9e est un multiple du nombre secret, donner un indice \u00e0 l&rsquo;utilisateur.\u00a0\u00bb<\/p>\n<p>Le programme deviendrait rapidement complexe et lourd au fur et \u00e0 mesure que vous augmentez le nombre de fonctionnalit\u00e9s et, par cons\u00e9quent, le nombre total de conditionnels imbriqu\u00e9s.<\/p>\n<p>C&rsquo;est pr\u00e9cis\u00e9ment le probl\u00e8me que la programmation orient\u00e9e objet tente de r\u00e9soudre.<\/p>\n\n<h2>Pr\u00e9-requis pour apprendre Python POO<\/h2>\n<p>Avant de vous lancer dans la programmation orient\u00e9e objet, nous vous recommandons vivement de ma\u00eetriser les bases de Python.<\/p>\n<p>Il peut \u00eatre difficile de classer les sujets consid\u00e9r\u00e9s comme \u00ab\u00a0basiques\u00a0\u00bb. C&rsquo;est pourquoi nous avons con\u00e7u un <a href=\"https:\/\/kinsta.com\/fr\/cheatsheets\/\">aide-m\u00e9moire<\/a> reprenant les principaux concepts n\u00e9cessaires \u00e0 l&rsquo;apprentissage de la programmation orient\u00e9e objet dans Python.<\/p>\n<ul>\n<li><strong>Variable :<\/strong> Nom symbolique qui pointe vers un objet sp\u00e9cifique (nous verrons ce que signifient les <strong>objets<\/strong> au fil de l&rsquo;article).<\/li>\n<\/ul>\n<ul>\n<li><strong>Op\u00e9rateurs arithm\u00e9tiques :<\/strong> Addition (+), soustraction (-), multiplication (*), division (\/), division enti\u00e8re (\/\/), modulo (%).<\/li>\n<\/ul>\n<ul>\n<li><strong>Types de donn\u00e9es int\u00e9gr\u00e9s :<\/strong> Num\u00e9riques (entiers, flottants, complexes), S\u00e9quences (cha\u00eenes de caract\u00e8res, listes, tuples), Bool\u00e9ens (Vrai, Faux), Dictionnaires et Ensembles.<\/li>\n<\/ul>\n<ul>\n<li><strong>Expressions bool\u00e9ennes :<\/strong> Expressions dans lesquelles le r\u00e9sultat est <strong>True<\/strong> ou <strong>False<\/strong>.<\/li>\n<\/ul>\n<ul>\n<li><strong>Conditionnel :<\/strong> \u00c9value une expression bool\u00e9enne et effectue un traitement en fonction du r\u00e9sultat. G\u00e9r\u00e9 par les instructions <strong>if\/else<\/strong>.<\/li>\n<\/ul>\n<ul>\n<li><strong>Boucle :<\/strong> Ex\u00e9cution r\u00e9p\u00e9t\u00e9e de blocs de code. Il peut s&rsquo;agir de boucles <strong>for<\/strong> ou <strong>while<\/strong>.<\/li>\n<\/ul>\n<ul>\n<li><strong>Fonctions :<\/strong> Bloc de code organis\u00e9 et r\u00e9utilisable. On les cr\u00e9e avec le mot-cl\u00e9 <strong>def<\/strong>.<\/li>\n<\/ul>\n<ul>\n<li><strong>Arguments :<\/strong> Objets pass\u00e9s \u00e0 une fonction. Par exemple : <code>sum([1, 2, 4]<\/code>)<\/li>\n<\/ul>\n<ul>\n<li><strong>Ex\u00e9cuter un script Python :<\/strong> Ouvrir un terminal ou une <a href=\"https:\/\/kinsta.com\/fr\/blog\/commandes-ssh\/\">ligne de commande <\/a>et saisir \u00ab\u00a0python &lt;nom du fichier&gt;\u00a0\u00bb.<\/li>\n<\/ul>\n<ul>\n<li><strong>Ouvrir un shell Python :<\/strong> Ouvrir un terminal et saisir <code>python<\/code> ou <code>python3<\/code> selon votre syst\u00e8me.<\/li>\n<\/ul>\n<p>Maintenant que ces concepts sont clairs comme de l&rsquo;eau de roche, vous pouvez passer \u00e0 la compr\u00e9hension de la programmation orient\u00e9e objet.<\/p>\n<h2><span style=\"color: #43414e;font-family: 'Brandon Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 2rem;font-weight: 900\">Qu&rsquo;est-ce que la programmation orient\u00e9e objet dans Python ?<\/span><\/h2>\n<p>La programmation orient\u00e9e objet (POO) est un paradigme de programmation dans lequel nous pouvons consid\u00e9rer des probl\u00e8mes complexes comme des objets.<\/p>\n<p>Un paradigme est une th\u00e9orie qui fournit la base de la r\u00e9solution des probl\u00e8mes.<\/p>\n<p>Ainsi, lorsque nous parlons de POO, nous faisons r\u00e9f\u00e9rence \u00e0 un ensemble de concepts et de mod\u00e8les que nous utilisons pour r\u00e9soudre des probl\u00e8mes avec des objets.<\/p>\n<p>Dans Python, un objet est une collection unique de donn\u00e9es (attributs) et de comportements (m\u00e9thodes). Vous pouvez consid\u00e9rer les objets comme des choses r\u00e9elles qui vous entourent. Prenons l&rsquo;exemple des calculatrices :<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Kinsta-Objects-around-you.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Kinsta-Objects-around-you.png\" alt=\"Une calculatrice peut \u00eatre un objet.\" width=\"1024\" height=\"512\"><\/a><figcaption class=\"wp-caption-text\">Une calculatrice peut \u00eatre un objet.<\/figcaption><\/figure>\n<p>Comme vous pouvez le remarquer, les donn\u00e9es (attributs) sont toujours des noms, tandis que les comportements (m\u00e9thode) sont toujours des verbes.<\/p>\n<p>Cette compartimentation est le concept central de la programmation orient\u00e9e objet. Vous construisez des objets qui stockent des donn\u00e9es et contiennent des types de fonctionnalit\u00e9s sp\u00e9cifiques.<\/p>\n<h2>Pourquoi utilisons-nous la programmation orient\u00e9e objet dans Python ?<\/h2>\n<p>La POO vous permet de cr\u00e9er des logiciels s\u00fbrs et fiables. De nombreux <a href=\"https:\/\/kinsta.com\/fr\/blog\/php-vs-python\/#library-support\">frameworks et biblioth\u00e8ques Python<\/a> utilisent ce paradigme pour construire leur base de code. Quelques exemples sont Django, Kivy, pandas, NumPy, et TensorFlow.<\/p>\n<p>Voyons les principaux avantages de l&rsquo;utilisation de la POO dans Python.<\/p>\n<h3>Avantages de la POO de Python<\/h3>\n<p>Les raisons suivantes vous feront opter pour l&rsquo;utilisation de la programmation orient\u00e9e objet dans Python.<\/p>\n<h4>Tous les langages de programmation modernes utilisent la POO<\/h4>\n<p>Ce paradigme est ind\u00e9pendant du langage. Si vous apprenez la POO dans Python, vous serez en mesure de l&rsquo;utiliser dans les cas suivants :<\/p>\n<ul>\n<li>Java<\/li>\n<li>PHP (assurez-vous de lire la <a href=\"https:\/\/kinsta.com\/fr\/blog\/php-vs-python\/\">comparaison entre PHP et Python<\/a>)<\/li>\n<li>Ruby<\/li>\n<li><a href=\"https:\/\/kinsta.com\/fr\/blog\/bibliotheques-javascript\/\">Javascript<\/a><\/li>\n<li>C#<\/li>\n<li>Kotlin<\/li>\n<\/ul>\n<p>Tous ces langages sont soit nativement orient\u00e9s objet, soit incluent des options pour des fonctionnalit\u00e9s orient\u00e9es objet. Si vous souhaitez apprendre l&rsquo;un d&rsquo;entre eux apr\u00e8s Python, ce sera plus facile &#8211; vous trouverez de nombreuses similitudes entre les langages travaillant avec des objets.<\/p>\n<h4>La POO vous permet de coder plus rapidement<\/h4>\n<p>Coder plus rapidement ne signifie pas \u00e9crire moins de lignes de code. Cela signifie que vous pouvez impl\u00e9menter plus de fonctionnalit\u00e9s en moins de temps sans compromettre la stabilit\u00e9 d&rsquo;un projet.<\/p>\n<p>La programmation orient\u00e9e objet vous permet de r\u00e9utiliser du code en mettant en \u0153uvre l&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#1-abstraction\">abstraction<\/a>. Ce principe rend votre code plus concis et plus lisible.<\/p>\n<p>Comme vous le savez peut-\u00eatre, <a href=\"https:\/\/kinsta.com\/fr\/blog\/engager-developpeur-wordpress\/\">les programmeurs<\/a> passent beaucoup plus de temps \u00e0 lire le code qu&rsquo;\u00e0 l&rsquo;\u00e9crire. C&rsquo;est la raison pour laquelle la lisibilit\u00e9 est toujours plus importante que la sortie des fonctionnalit\u00e9s le plus rapidement possible.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><a style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\" href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Kinsta-Not-legible-code.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Kinsta-Not-legible-code.png\" alt=\"La productivit\u00e9 diminue lorsque le code n'est pas lisible\" width=\"1024\" height=\"512\"><\/a><figcaption class=\"wp-caption-text\">La productivit\u00e9 diminue lorsque le code n&rsquo;est pas lisible<\/figcaption><\/figure>\n<p>Vous en saurez plus sur le principe d&rsquo;abstraction plus tard.<\/p>\n<h4>La POO vous aide \u00e0 \u00e9viter le code spaghetti<\/h4>\n<p>Vous vous souvenez du programme de devinette des chiffres pr\u00e9sent\u00e9 au d\u00e9but de cet article ?<\/p>\n<p>Si vous continuez \u00e0 ajouter des fonctionnalit\u00e9s, vous aurez \u00e0 l&rsquo;avenir de nombreuses instructions <strong>if<\/strong> imbriqu\u00e9es. Cet enchev\u00eatrement de lignes de code sans fin est appel\u00e9 code spaghetti, et vous devez l&rsquo;\u00e9viter autant que possible.<\/p>\n<p>La POO nous donne la possibilit\u00e9 de <a href=\"https:\/\/kinsta.com\/fr\/blog\/activer-gzip-compression\/\">compresser<\/a> toute la logique dans des objets, \u00e9vitant ainsi les longs morceaux de <strong>if<\/strong> imbriqu\u00e9s.<\/p>\n<h4>La POO am\u00e9liore votre analyse de toute situation<\/h4>\n<p>Une fois que vous aurez acquis une certaine exp\u00e9rience de la POO, vous serez en mesure de consid\u00e9rer les probl\u00e8mes comme des objets petits et sp\u00e9cifiques.<\/p>\n<p>Cette compr\u00e9hension conduit \u00e0 une initialisation rapide du projet.<\/p>\n<h3>Programmation structur\u00e9e et programmation orient\u00e9e objet<\/h3>\n<p>La programmation structur\u00e9e est le paradigme le plus utilis\u00e9 par les d\u00e9butants car c&rsquo;est la mani\u00e8re la plus simple de construire un petit programme.<\/p>\n<p>Il s&rsquo;agit d&rsquo;ex\u00e9cuter un programme Python de mani\u00e8re s\u00e9quentielle. Cela signifie que vous donnez \u00e0 l&rsquo;ordinateur une liste de t\u00e2ches et que vous les ex\u00e9cutez de haut en bas.<\/p>\n<p>Voyons un exemple de programmation structur\u00e9e avec le programme d&rsquo;un caf\u00e9.<\/p>\n<pre><code class=\"language-python\">small = 2\nregular = 5\nbig = 6\n \nuser_budget = input('What is your budget? ')\n \ntry:\n   user_budget = int(user_budget)\nexcept:\n   print('Please enter a number')\n   exit()\n \nif user_budget &gt; 0:\n   if user_budget &gt;= big:\n       print('You can afford the big coffee')\n       if user_budget == big:\n           print('It\\'s complete')\n       else:\n           print('Your change is', user_budget - big)\n   elif user_budget == regular:\n       print('You can afford the regular coffee')\n       print('It\\'s complete')\n   elif user_budget &gt;= small:\n       print('You can buy the small coffee')\n       if user_budget == small:\n           print('It\\'s complete')\n       else:\n           print('Your change is', user_budget - small)\n<\/code><\/pre>\n<p>Le code ci-dessus agit comme un vendeur de caf\u00e9. Il vous demandera un budget, puis vous \u00ab\u00a0vendra\u00a0\u00bb le plus grand caf\u00e9 que vous \u00eates capable d&rsquo;acheter.<\/p>\n<p>Essayez de l&rsquo;ex\u00e9cuter dans le <a href=\"https:\/\/kinsta.com\/fr\/blog\/wp-cli\/\">terminal<\/a>. Il s&rsquo;ex\u00e9cutera \u00e9tape par \u00e9tape, en fonction de votre entr\u00e9e.<\/p>\n<p>Ce code fonctionne parfaitement, mais nous avons trois probl\u00e8mes :<\/p>\n<ol>\n<li>Il y a beaucoup de logique r\u00e9p\u00e9t\u00e9e.<\/li>\n<li>Il utilise de nombreuses conditionnelles <strong>if<\/strong> imbriqu\u00e9es.<\/li>\n<li>Il sera difficile \u00e0 lire et \u00e0 modifier.<\/li>\n<\/ol>\n<p>La POO a \u00e9t\u00e9 invent\u00e9e comme une solution \u00e0 tous ces probl\u00e8mes.<\/p>\n<p><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">Voyons le programme ci-dessus mis en \u0153uvre avec la POO. Ne vous inqui\u00e9tez pas si vous ne le comprenez pas encore. C&rsquo;est seulement pour comparer la programmation structur\u00e9e et la programmation orient\u00e9e objet.<\/span><\/p>\n<pre><code class=\"language-python\">class Coffee:\n        # Constructor\n        def __init__(self, name, price):\n                self.name = name\n                self.price = float(price)\n        def check_budget(self, budget):\n                # Check if the budget is valid\n                if not isinstance(budget, (int, float)):\n                        print('Enter float or int')\n                        exit()\n                if budget &lt; 0: print('Sorry you don\\'t have money') exit() def get_change(self, budget): return budget - self.price def sell(self, budget): self.check_budget(budget) if budget &gt;= self.price:\n                        print(f'You can buy the {self.name} coffee')\n                        if budget == self.price:\n                                print('It\\'s complete')\n                        else:\n                                print(f'Here is your change {self.get_change(budget)}$')\n\n                        exit('Thanks for your transaction')\n<\/code><\/pre>\n<p><strong>Note :<\/strong> Tous les concepts suivants seront expliqu\u00e9s plus en d\u00e9tail dans l&rsquo;article.<\/p>\n<p>Le code ci-dessus repr\u00e9sente une <strong>classe<\/strong> nomm\u00e9e \u00ab\u00a0Coffee\u00a0\u00bb. Elle poss\u00e8de deux attributs &#8211; \u00ab\u00a0name\u00a0\u00bb et \u00ab\u00a0price\u00a0\u00bb &#8211; et ils sont tous deux utilis\u00e9s dans les m\u00e9thodes. La m\u00e9thode principale est \u00ab\u00a0sell\u00a0\u00bb, qui traite toute la logique n\u00e9cessaire \u00e0 la r\u00e9alisation du processus de vente.<\/p>\n<p>Si vous essayez d&rsquo;ex\u00e9cuter cette classe, vous n&rsquo;obtiendrez aucun r\u00e9sultat. Cela se produit principalement parce que nous ne faisons que d\u00e9clarer le \u00ab\u00a0mod\u00e8le\u00a0\u00bb pour les caf\u00e9s, et non les caf\u00e9s eux-m\u00eames.<\/p>\n<p><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">Impl\u00e9mentons cette classe avec le code suivant :<\/span><\/p>\n<pre><code class=\"language-python\">small = Coffee('Small', 2)\nregular = Coffee('Regular', 5)\nbig = Coffee('Big', 6)\n \ntry:\n   user_budget = float(input('What is your budget? '))\nexcept ValueError:\n   exit('Please enter a number')\n  \nfor coffee in [big, regular, small]:\n   coffee.sell(user_budget)\n<\/code><\/pre>\n<p>Ici, nous cr\u00e9ons des <strong>instances<\/strong>, ou objets caf\u00e9, de la classe \u00ab\u00a0Coffee\u00a0\u00bb, puis nous appelons la m\u00e9thode \u00ab\u00a0sell\u00a0\u00bb de chaque caf\u00e9 jusqu&rsquo;\u00e0 ce que l&rsquo;utilisateur puisse s&rsquo;offrir n&rsquo;importe quelle option.<\/p>\n<p>Nous obtiendrons le m\u00eame r\u00e9sultat avec les deux approches, mais nous pouvons bien mieux \u00e9tendre la fonctionnalit\u00e9 du programme avec la POO.<\/p>\n<p>Vous trouverez ci-dessous un tableau comparant la programmation orient\u00e9e objet et la programmation structur\u00e9e:<\/p>\n<table width=\"602\">\n<tbody>\n<tr>\n<td width=\"320\"><strong>POO<\/strong><\/td>\n<td width=\"282\"><strong>Programmation structur\u00e9e<\/strong><\/td>\n<\/tr>\n<tr>\n<td width=\"320\">Plus facile \u00e0 maintenir<\/td>\n<td width=\"282\">Difficile \u00e0 maintenir<\/td>\n<\/tr>\n<tr>\n<td width=\"320\">Approche Don&rsquo;t Repeat Yourself (DRY)<\/td>\n<td width=\"282\">Code r\u00e9p\u00e9t\u00e9 \u00e0 de nombreux endroits<\/td>\n<\/tr>\n<tr>\n<td width=\"320\">Petits morceaux de code r\u00e9utilis\u00e9s \u00e0 de nombreux endroits<\/td>\n<td width=\"282\">Une grande quantit\u00e9 de code \u00e0 quelques endroits<\/td>\n<\/tr>\n<tr>\n<td width=\"320\">Approche par objet<\/td>\n<td width=\"282\">Approche par blocs de code<\/td>\n<\/tr>\n<tr>\n<td width=\"320\">Plus facile \u00e0 <a href=\"https:\/\/kinsta.com\/fr\/blog\/debogage-wordpress\/\">d\u00e9boguer<\/a><\/td>\n<td width=\"282\">Plus difficile \u00e0 d\u00e9boguer<\/td>\n<\/tr>\n<tr>\n<td width=\"320\">Grande courbe d&rsquo;apprentissage<\/td>\n<td width=\"282\">Courbe d&rsquo;apprentissage plus simple<\/td>\n<\/tr>\n<tr>\n<td width=\"320\">Utilis\u00e9 dans les <a href=\"https:\/\/kinsta.com\/fr\/clients\/\">grands projets<\/a><\/td>\n<td width=\"282\">Optimis\u00e9 pour les programmes simples<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Pour conclure la comparaison des paradigmes :<\/p>\n<ul>\n<li>Aucun des deux paradigmes n&rsquo;est parfait (la POO peut \u00eatre \u00e9crasante \u00e0 utiliser dans des projets simples).<\/li>\n<li>Ce ne sont l\u00e0 que deux fa\u00e7ons de r\u00e9soudre un probl\u00e8me ; il en existe d&rsquo;autres.<\/li>\n<li>La POO est utilis\u00e9e dans les grandes bases de code, tandis que la programmation structur\u00e9e est principalement destin\u00e9e aux projets simples.<\/li>\n<\/ul>\n<p>Passons maintenant aux objets int\u00e9gr\u00e9s dans Python.<\/p>\n<h2>Tout est un objet dans Python<\/h2>\n<p>Nous allons vous dire un secret : vous utilisez la POO tout le temps sans vous en rendre compte.<\/p>\n<p>M\u00eame en utilisant d&rsquo;autres paradigmes dans Python, vous utilisez toujours des objets pour presque tout faire.<\/p>\n<p>C&rsquo;est parce que, dans Python, tout est un objet.<\/p>\n<p>Rappelez-vous la d\u00e9finition d&rsquo;un objet : Un objet dans Python est une collection unique de donn\u00e9es (attributs) et de comportements (m\u00e9thodes).<\/p>\n<p>Cela correspond \u00e0 n&rsquo;importe quel type de donn\u00e9es dans Python.<\/p>\n<p>Une cha\u00eene de caract\u00e8res est un ensemble de donn\u00e9es (caract\u00e8res) et de comportements (<strong>upper()<\/strong>, <strong>lower()<\/strong>, etc&#8230;). Il en va de m\u00eame pour les <strong>entiers<\/strong>, les <strong>flottants<\/strong>, les <strong>bool\u00e9ens<\/strong>, les <strong>listes<\/strong> et les dictionnaires.<\/p>\n<p>Avant de poursuivre, rappelons la signification des attributs et des m\u00e9thodes.<\/p>\n<h3>Attributs et m\u00e9thodes<\/h3>\n<p>Les attributs sont des <strong>variables<\/strong> internes aux objets, tandis que les m\u00e9thodes sont des <strong>fonctions<\/strong> qui produisent un certain comportement.<\/p>\n<p>Faisons un exercice simple dans le shell Python. Vous pouvez l&rsquo;ouvrir en saisissant <code>python<\/code> ou <code>python3<\/code> dans votre terminal.<\/p>\n<figure style=\"width: 843px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Python-terminal.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Python-terminal.png\" alt=\"Shell Python\" width=\"843\" height=\"123\"><\/a><figcaption class=\"wp-caption-text\">Shell Python<\/figcaption><\/figure>\n<p>Maintenant, travaillons avec le <a href=\"https:\/\/kinsta.com\/fr\/blog\/ssh-vs-ssl\/\">shell<\/a> <span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">Python pour d\u00e9couvrir les m\u00e9thodes et les types.<\/span><\/p>\n<pre><code class=\"language-python\">&gt;&gt;&gt; kinsta = 'Kinsta, Premium Application, Database, and Managed WordPress hosting'\n&gt;&gt;&gt; kinsta.upper()\n'KINSTA, PREMIUM APPLICATION, DATABASE, AND MANAGED WORDPRESS HOSTING'\n<\/code><\/pre>\n<p>Dans la deuxi\u00e8me ligne, nous appelons une m\u00e9thode de cha\u00eene de caract\u00e8res, <strong>upper()<\/strong>. Elle renvoie le contenu de la cha\u00eene en majuscules. Cependant, elle ne modifie pas la variable d&rsquo;origine.<\/p>\n<pre><code class=\"language-python\">&gt;&gt;&gt; kinsta\n'Kinsta, Premium Application, Database, and Managed WordPress hosting'\n<\/code><\/pre>\n<p>Examinons les fonctions utiles pour travailler avec des objets.<\/p>\n<p>La fonction <strong>type()<\/strong> permet d&rsquo;obtenir le type d&rsquo;un objet. Le \u00ab\u00a0type\u00a0\u00bb est la classe \u00e0 laquelle l&rsquo;objet appartient.<\/p>\n<pre><code class=\"language-python\">&gt;&gt;&gt; type(kinsta)\n# class 'str'\n<\/code><\/pre>\n<p>La fonction <strong>dir()<\/strong> renvoie tous les attributs et m\u00e9thodes d&rsquo;un objet. Testons-la avec la variable <strong>kinsta<\/strong>.<\/p>\n<pre><code class=\"language-python\">&gt;&gt;&gt; dir(ki<span id=\"urn:enhancement-8\" class=\"textannotation\">nsta)\n<\/span>['__add__', '__class__',  ........... 'upper', 'zfill']\n<\/code><\/pre>\n<p>Maintenant, essayez d&rsquo;afficher certains des attributs cach\u00e9s de cet objet.<\/p>\n<pre><code class=\"language-python\">&gt;&gt;&gt; kinsta.__class__ # class 'str' e&gt;<\/code><\/pre>\n<p>Cette fonction renvoie la classe \u00e0 laquelle appartient l&rsquo;objet <strong>kinsta<\/strong>. Nous pouvons donc dire que la seule chose que la fonction <strong>type<\/strong> renvoie est l&rsquo;attribut <strong>__class__<\/strong> d&rsquo;un objet.<\/p>\n<p>Vous pouvez exp\u00e9rimenter avec tous les types de donn\u00e9es, en d\u00e9couvrant tous leurs attributs et m\u00e9thodes directement sur le terminal. Vous pouvez en savoir plus sur les types de donn\u00e9es int\u00e9gr\u00e9s dans la <a href=\"https:\/\/docs.python.org\/3\/library\/stdtypes.html\">documentation officielle<\/a>.<\/p>\n<h2>Votre premier objet dans Python<\/h2>\n<p>Une <strong>classe<\/strong> est comme un mod\u00e8le. Elle vous permet de cr\u00e9er des objets personnalis\u00e9s en fonction des attributs et des m\u00e9thodes que vous d\u00e9finissez.<\/p>\n<p>Vous pouvez l&rsquo;imaginer comme un <strong>emporte-pi\u00e8ce<\/strong> que vous modifiez pour pr\u00e9parer les cookies parfaits (des objets, pas des <a href=\"https:\/\/kinsta.com\/fr\/blog\/cookies-sessions-php-wordpress\/\">cookies de suivi<\/a>), avec des caract\u00e9ristiques d\u00e9finies : Forme, Taille, et plus encore.<\/p>\n<p>D&rsquo;autre part, nous avons des <strong>instances<\/strong>. Une instance est un objet individuel d&rsquo;une classe, qui poss\u00e8de une adresse m\u00e9moire unique.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Kinsta-Instances.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Kinsta-Instances.png\" alt=\"Instances en Python\" width=\"1024\" height=\"512\"><\/a><figcaption class=\"wp-caption-text\">Instances dans Python<\/figcaption><\/figure>\n<p>Maintenant que vous savez ce que sont les classes et les instances, d\u00e9finissons-en quelques-unes !<\/p>\n<p>Pour d\u00e9finir une classe dans Python, vous utilisez le mot-cl\u00e9 <strong>class<\/strong>, suivi de son nom. Dans ce cas, vous allez cr\u00e9er une classe nomm\u00e9e <strong>Cookie<\/strong>.<\/p>\n<p><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\"><strong>Note :<\/strong> Dans Python, nous utilisons la <a href=\"https:\/\/en.wikipedia.org\/wiki\/Camel_case#:~:text=Camel case (sometimes stylized as,word starting with either case.\">convention des noms en majuscules pour nommer<\/a> les classes.<\/span><\/p>\n<pre><code class=\"language-python\">class Cookie:\n\tpass\n<\/code><\/pre>\n<p>Ouvrez votre shell Python et saisissez le code ci-dessus. Pour cr\u00e9er une instance d&rsquo;une classe, il suffit de saisir son nom et la parenth\u00e8se qui le suit. C&rsquo;est le m\u00eame processus que pour invoquer une fonction.<\/p>\n<pre><code class=\"language-python\">cookie1 = Cookie()\n<\/code><\/pre>\n<p>F\u00e9licitations &#8211; vous venez de cr\u00e9er votre premier objet dans Python ! Vous pouvez v\u00e9rifier son id et son type avec le code suivant :<\/p>\n<pre><code class=\"language-python\">id(cookie1)\n140130610977040 # Unique identifier of the object\n\ntype(cookie1)\n&lt;class '__main__.Cookie'&gt;\n<\/code><\/pre>\n<p>Comme vous pouvez le voir, ce cookie a un identificateur unique en m\u00e9moire, et son type est <strong>Cookie<\/strong>.<\/p>\n<p>Vous pouvez \u00e9galement v\u00e9rifier si un objet est une instance d&rsquo;une classe avec la fonction <strong>isinstance()<\/strong>.<\/p>\n<pre><code class=\"language-python\">isinstance(cookie1, Cookie)\n# True\nisinstance(cookie1, int)\n# False\nisinstance('a string', Cookie)\n# False\n<\/code><\/pre>\n<h3>M\u00e9thode constructor<\/h3>\n<p>La m\u00e9thode <strong>__init__()<\/strong> est aussi appel\u00e9e \u00ab\u00a0constructor\u00a0\u00bb. Elle est appel\u00e9e par Python chaque fois que l&rsquo;on instancie un objet.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/fr\/blog\/php-8\/#constructor-property-promotion\">Constructor<\/a> cr\u00e9e l&rsquo;\u00e9tat initial de l&rsquo;objet avec l&rsquo;ensemble minimal de param\u00e8tres dont il a besoin pour exister. Modifions la classe <strong>Cookie<\/strong>, afin qu&rsquo;elle accepte des param\u00e8tres dans constructor<span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">.<\/span><\/p>\n<pre><code class=\"language-python\">class Cookie:\n\t# Constructor\n\tdef __init__(self, name, shape, chips='Chocolate'):\n\t\t# Instance attributes\n\t\tself.name = name\n\t\tself.shape = shape\n\t\tself.chips = chips\n<\/code><\/pre>\n<p>Dans la classe <strong>Cookie<\/strong>, chaque cookie doit avoir <em>name<\/em>, <em>shape et chips<\/em>. Nous avons d\u00e9fini le dernier comme \u00ab Chocolate \u00bb.<\/p>\n<p>D&rsquo;autre part, <strong>self<\/strong> fait r\u00e9f\u00e9rence \u00e0 l&rsquo;instance de la classe (l&rsquo;objet lui-m\u00eame).<\/p>\n<p>Essayez de coller la classe dans le shell et cr\u00e9ez une instance du cookie comme d&rsquo;habitude<span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">.<\/span><\/p>\n<pre><code class=\"language-python\">cookie2 = Cookie()\n# TypeError\n<\/code><\/pre>\n<p>Vous obtiendrez une erreur. C&rsquo;est parce que vous devez fournir l&rsquo;ensemble minimal de donn\u00e9es dont l&rsquo;objet a besoin pour vivre &#8211; dans ce cas, <strong>name<\/strong> et <strong>shape<\/strong> puisque nous avons d\u00e9j\u00e0 d\u00e9fini <strong>chips<\/strong> pour \u00ab\u00a0Chocolate\u00a0\u00bb.<\/p>\n<pre><code class=\"language-python\">cookie2 = Cookie('Awesome cookie', 'Star')\n<\/code><\/pre>\n<p>Pour acc\u00e9der aux attributs d&rsquo;une instance, vous devez utiliser la notation point.<\/p>\n<pre><code class=\"language-python\">cookie2.name\n# 'Awesome cookie'\ncookie2.shape\n# 'Star'\ncookie2.chips\n# 'Chocolate'\n<\/code><\/pre>\n<p>Pour l&rsquo;instant, la classe <strong>Cookie<\/strong> n&rsquo;a rien de bien juteux. Ajoutons un exemple de m\u00e9thode <strong>bake()<\/strong> pour rendre les choses plus int\u00e9ressantes.<\/p>\n<pre><code class=\"language-python\">class Cookie:\n\t# Constructor\n\tdef __init__(self, name, shape, chips='Chocolate'):\n\t\t# Instance attributes\n\t\tself.name = name\n\t\tself.shape = shape\n\t\tself.chips = chips\n\n\t# The object is passing itself as a parameter\n\tdef bake(self):\n\t\tprint(f'This {self.name}, is being baked with the shape {self.shape} and chips of {self.chips}')\n\t\tprint('Enjoy your cookie!')\n<\/code><\/pre>\n<p>Pour appeler une m\u00e9thode, utilisez la notation point et invoquez-la comme une fonction.<\/p>\n<pre><code class=\"language-python\">cookie3 = Cookie('Baked cookie', 'Tree')\ncookie3.bake()\n# This Baked cookie, is being baked with the shape Tree and chips of Chocolate\nEnjoy your cookie!\n<\/code><\/pre>\n<h2>Les 4 piliers de la POO dans Python<\/h2>\n<p>La programmation orient\u00e9e objet comprend quatre piliers principaux :<\/p>\n<h4>1. Abstraction<\/h4>\n<p>L&rsquo;abstraction cache la fonctionnalit\u00e9 interne d&rsquo;une application \u00e0 l&rsquo;utilisateur. L&rsquo;utilisateur peut \u00eatre soit le client final, soit d&rsquo;autres d\u00e9veloppeurs.<\/p>\n<p>Nous pouvons trouver l&rsquo;<strong>abstraction<\/strong> dans notre vie quotidienne. Par exemple, vous savez comment utiliser votre t\u00e9l\u00e9phone, mais vous ne savez probablement pas exactement ce qui se passe \u00e0 l&rsquo;int\u00e9rieur chaque fois que vous ouvrez une application.<\/p>\n<p>Un autre exemple est Python lui-m\u00eame. Vous savez comment l&rsquo;utiliser pour cr\u00e9er des <a href=\"https:\/\/kinsta.com\/fr\/blog\/logiciel-cms\/\">logiciels fonctionnels<\/a>, et vous pouvez le faire m\u00eame si vous ne comprenez pas les m\u00e9canismes internes de Python.<\/p>\n<p><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">Appliquer la m\u00eame chose au code permet de rassembler tous les objets d&rsquo;un probl\u00e8me et d&rsquo;<strong>abstraire<\/strong> les fonctionnalit\u00e9s standard en classes.<\/span><\/p>\n<h4>2. H\u00e9ritage<\/h4>\n<p>L&rsquo;h\u00e9ritage nous permet de d\u00e9finir de multiples <strong>sous-classes<\/strong> \u00e0 partir d&rsquo;une classe d\u00e9j\u00e0 d\u00e9finie.<\/p>\n<p>L&rsquo;objectif principal est de suivre le <a href=\"https:\/\/en.wikipedia.org\/wiki\/Don't_repeat_yourself\">principe DRY<\/a> (Don&rsquo;t Repeat Yourself). Vous serez en mesure de r\u00e9utiliser beaucoup de code en impl\u00e9mentant tous les composants de partage dans des <strong>super-classes<\/strong>.<\/p>\n<p>Vous pouvez y voir le concept r\u00e9el de l&rsquo;<strong>h\u00e9ritage g\u00e9n\u00e9tique<\/strong>. Les <a href=\"https:\/\/kinsta.com\/fr\/blog\/theme-enfant-wordpress\/\">enfants<\/a> (sous-classe) sont le r\u00e9sultat de l&rsquo;h\u00e9ritage entre deux parents (super-classe). Ils h\u00e9ritent de toutes les caract\u00e9ristiques physiques (attributs) et de certains comportements communs (m\u00e9thodes).<\/p>\n<h4>3. Polymorphisme<\/h4>\n<p>Le polymorphisme nous permet de modifier l\u00e9g\u00e8rement les m\u00e9thodes et les attributs des <strong>sous-classes<\/strong> pr\u00e9alablement d\u00e9finies dans la <strong>super-classe<\/strong>.<\/p>\n<p>Le sens litt\u00e9ral est \u00ab\u00a0<strong>plusieurs formes<\/strong>\u00a0\u00bb. C&rsquo;est parce que nous construisons des m\u00e9thodes ayant le m\u00eame nom mais des fonctionnalit\u00e9s diff\u00e9rentes.<\/p>\n<p>Pour revenir \u00e0 l&rsquo;id\u00e9e pr\u00e9c\u00e9dente, les enfants sont \u00e9galement un parfait exemple de polymorphisme. Ils peuvent h\u00e9riter d&rsquo;un comportement d\u00e9fini <strong>get_hungry()<\/strong> mais d&rsquo;une mani\u00e8re l\u00e9g\u00e8rement diff\u00e9rente, par exemple en ayant faim toutes les 4 heures au lieu de toutes les 6 heures.<\/p>\n<h4>4. Encapsulation<\/h4>\n<p>L&rsquo;encapsulation est le processus par lequel nous prot\u00e9geons l&rsquo;int\u00e9grit\u00e9 interne des donn\u00e9es dans une classe.<\/p>\n<p>Bien qu&rsquo;il n&rsquo;existe pas d&rsquo;instruction <strong>private<\/strong> dans Python, vous pouvez appliquer l&rsquo;encapsulation en utilisant le <a href=\"https:\/\/en.wikipedia.org\/wiki\/Name_mangling#Python\">mangling dans Python<\/a>. Il existe des m\u00e9thodes sp\u00e9ciales appel\u00e9es <strong>getters<\/strong> et <strong>setters<\/strong> qui nous permettent d&rsquo;acc\u00e9der \u00e0 des attributs et m\u00e9thodes uniques.<\/p>\n<p><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">Imaginons une classe <strong>Human<\/strong> qui poss\u00e8de un attribut unique nomm\u00e9 <strong>_height<\/strong>. Vous ne pouvez modifier cet attribut qu&rsquo;en respectant certaines contraintes (il est presque impossible d&rsquo;\u00eatre plus grand que 3 m\u00e8tres).<\/span><\/p>\n<h2>Construire un calculateur de r\u00e9solution de forme de surface<\/h2>\n<p>L&rsquo;un des avantages de Python est qu&rsquo;il nous permet de cr\u00e9er une grande vari\u00e9t\u00e9 de logiciels, depuis un programme <a href=\"https:\/\/kinsta.com\/fr\/docs\/devkinsta\/wp-cli\/\">CLI (interface de ligne de commande)<\/a> jusqu&rsquo;\u00e0 une application web complexe.<\/p>\n<p>Maintenant que vous avez appris les concepts fondamentaux de la POO, il est temps de les appliquer \u00e0 un projet r\u00e9el.<\/p>\n<p><strong>Note :<\/strong> Tout le code suivant sera disponible dans ce <a href=\"https:\/\/github.com\/DaniDiazTech\/Object-Oriented-Programming-in-Python\/blob\/main\/shape_calculator\/calculator.py\">d\u00e9p\u00f4t GitHub<\/a>. Un <a href=\"https:\/\/kinsta.com\/fr\/blog\/outils-revue-code\/#3-github\">outil de r\u00e9vision de code<\/a> qui nous aide \u00e0 g\u00e9rer les versions du code avec Git.<\/p>\n<p>Votre t\u00e2che consiste \u00e0 cr\u00e9er un calculateur d&rsquo;aire pour les formes suivantes :<\/p>\n<ul>\n<li>Square<\/li>\n<li>Rectangle<\/li>\n<li>Triangle<\/li>\n<li>Circle<\/li>\n<li>Hexagon<\/li>\n<\/ul>\n<h3>Classe de base de la forme<\/h3>\n<p>Tout d&rsquo;abord, cr\u00e9ez un fichier <strong>calculator.py<\/strong> et ouvrez-le. Puisque nous avons d\u00e9j\u00e0 les objets avec lesquels travailler, il sera facile d\u2019en faire <strong>abstraction<\/strong> dans une classe.<\/p>\n<p>Vous pouvez analyser les caract\u00e9ristiques communes et d\u00e9couvrir que toutes ces formes sont des <strong>formes en 2D<\/strong>. Par cons\u00e9quent, la meilleure option est de cr\u00e9er une classe <strong>Shape<\/strong> avec une m\u00e9thode <strong>get_area()<\/strong> dont chaque forme h\u00e9ritera.<\/p>\n<p><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\"><strong>Note :<\/strong> Toutes les m\u00e9thodes doivent \u00eatre des verbes. C&rsquo;est parce que cette m\u00e9thode s&rsquo;appelle <strong>get_area()<\/strong> et non <strong>area()<\/strong>.<\/span><\/p>\n<pre><code class=\"language-python\">class Shape:\n\tdef __init__(self):\n\t\tpass\n\n\tdef get_area(self):\n\t\tpass\n<\/code><\/pre>\n<p>Le code ci-dessus d\u00e9finit la classe ; cependant, il n&rsquo;y a rien d&rsquo;int\u00e9ressant dedans pour le moment.<\/p>\n<p><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">Impl\u00e9mentons la fonctionnalit\u00e9 standard de la plupart de ces formes.<\/span><\/p>\n<pre><code class=\"language-python\">class Shape:\n\tdef __init__(self, side1, side2):\n\t\tself.side1 = side1\n\t\tself.side2 = side2\n\n\tdef get_area(self):\n\t\treturn self.side1 * self.side2\n\n\tdef __str__(self):\n\t\treturn f'The area of this {self.__class__.__name__} is: {self.get_area()}'\n<\/code><\/pre>\n<p>D\u00e9composons ce que nous faisons avec ce code :<\/p>\n<ul>\n<li>Dans la m\u00e9thode <strong>__init__<\/strong>, nous demandons deux param\u00e8tres, <strong>side1<\/strong> et <strong>side2<\/strong>. Ceux-ci resteront des <strong>attributs d&rsquo;instance<\/strong>.<\/li>\n<li>La fonction <strong>get_area()<\/strong> renvoie la surface de la forme. Dans ce cas, elle utilise la formule de l&rsquo;aire d&rsquo;un rectangle car elle sera plus facile \u00e0 mettre en \u0153uvre avec d&rsquo;autres formes.<\/li>\n<li>La m\u00e9thode <strong>__str__()<\/strong> est une \u00ab\u00a0m\u00e9thode magique\u00a0\u00bb tout comme <strong>__init__()<\/strong>. Elle vous permet de modifier la fa\u00e7on dont une instance va sortir.<\/li>\n<li>L&rsquo;attribut masqu\u00e9<strong> self.__class__.__name__<\/strong> fait r\u00e9f\u00e9rence au nom de la classe. Si vous travaillez avec une classe <strong>Triangle<\/strong>, cet attribut sera \u00ab\u00a0Triangle\u00a0\u00bb.<\/li>\n<\/ul>\n<h3>Classe Rectangle<\/h3>\n<p>Puisque nous avons impl\u00e9ment\u00e9 la formule de l&rsquo;aire du rectangle, nous pouvons cr\u00e9er une simple classe <strong>Rectangle<\/strong> qui ne fait rien d&rsquo;autre qu&rsquo;h\u00e9riter de la classe <strong>Shape<\/strong>.<\/p>\n<p>Pour appliquer l&rsquo;<strong>h\u00e9ritage<\/strong> dans Python, vous devez cr\u00e9er une classe comme d&rsquo;habitude et entourer la <strong>super-classe<\/strong> dont vous voulez h\u00e9riter avec des parenth\u00e8ses.<\/p>\n<pre><code class=\"language-python\"># Folded base class\nclass Shape: ...\n \nclass Rectangle(Shape): # Superclass in Parenthesis\n\tpass\n<\/code><\/pre>\n<h3>Classe square<\/h3>\n<p>Nous pouvons adopter une excellente approche du <strong>polymorphisme<\/strong> avec la classe <strong>Square<\/strong>.<\/p>\n<p>Rappelez-vous qu&rsquo;un carr\u00e9 est simplement un rectangle dont les quatre c\u00f4t\u00e9s sont tous \u00e9gaux. Cela signifie que nous pouvons utiliser la m\u00eame formule pour obtenir l&rsquo;aire.<\/p>\n<p>Nous pouvons le faire en modifiant la m\u00e9thode <strong>init<\/strong>, en n&rsquo;acceptant qu&rsquo;un c\u00f4t\u00e9 comme param\u00e8tre, et en passant la valeur de ce c\u00f4t\u00e9 au constructeur de la classe <strong>Rectangle<\/strong>.<\/p>\n<pre><code class=\"language-python\"># Folded classes\nclass Shape: ...\nclass Rectangle(Shape): ...\n \nclass Square(Rectangle):\n\tdef __init__(self, side):\n\t\tsuper().__init__(side, side)\n<\/code><\/pre>\n<p>Comme vous pouvez le voir, la <a href=\"https:\/\/docs.python.org\/3\/library\/functions.html#super\">super fonction<\/a> transmet le param\u00e8tre <strong>side<\/strong> deux fois \u00e0 la <strong>super-classe<\/strong>. En d&rsquo;autres termes, elle transmet <strong>side<\/strong> \u00e0 la fois comme <strong>side1<\/strong> et <strong>side2<\/strong> au constructeur pr\u00e9c\u00e9demment d\u00e9fini.<\/p>\n<h3>Classe Triangle<\/h3>\n<p>Un triangle est deux fois moins grand que le rectangle qui l&rsquo;entoure.<\/p>\n<figure style=\"width: 300px\" class=\"wp-caption alignnone\"><a style=\"font-size: 1rem\" href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Triangle-formula.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Triangle-formula.png\" alt=\"Relation entre les triangles et les rectangles (Source de l'image : tuteurs Varsity).\" width=\"300\" height=\"200\"><\/a><figcaption class=\"wp-caption-text\">Relation entre les triangles et les rectangles (Source de l&rsquo;image : tuteurs Varsity).<\/figcaption><\/figure>\n<p>Par cons\u00e9quent, nous pouvons h\u00e9riter de la classe <strong>Rectangle<\/strong> et modifier la m\u00e9thode <strong>get_area<\/strong> pour qu&rsquo;elle corresponde \u00e0 la formule de l&rsquo;aire du triangle, qui est la moiti\u00e9 de la base multipli\u00e9e par la hauteur.<\/p>\n<pre><code class=\"language-python\"># Folded classes\nclass Shape: ...\nclass Rectangle(Shape): ...\nclass Square(Rectangle): ...\n \nclass Triangle(Rectangle):\n\tdef __init__(self, base, height):\n\t\tsuper().__init__(base, height)\n \n\tdef get_area(self):\n\t\tarea = super().get_area()\n\t\treturn area \/ 2\n<\/code><\/pre>\n<p>Un autre cas d&rsquo;utilisation de la fonction <strong>super()<\/strong> consiste \u00e0 appeler une m\u00e9thode d\u00e9finie dans la <strong>super-classe<\/strong> et \u00e0 stocker le r\u00e9sultat dans une variable. C&rsquo;est ce qui se passe dans la m\u00e9thode <strong>get_area()<\/strong>.<\/p>\n<h3>Classe circle<\/h3>\n<p>Vous pouvez trouver l&rsquo;aire d&rsquo;un cercle avec la formule <strong>\u03c0r\u00b2<\/strong>, o\u00f9 <strong>r<\/strong> est le rayon du cercle. Cela signifie que nous devons modifier la m\u00e9thode <strong>get_area()<\/strong> pour mettre en \u0153uvre cette formule.<\/p>\n<p><strong>Note :<\/strong> Nous pouvons importer la valeur approximative de <strong>\u03c0<\/strong> du module math\u00e9matique<\/p>\n<pre><code class=\"language-python\"># Folded classes\nclass Shape: ...\nclass Rectangle(Shape): ...\nclass Square(Rectangle): ...\nclass Triangle(Rectangle): \u2026\n \n# At the start of the file\nfrom math import pi\n \nclass Circle(Shape):\n\tdef __init__(self, radius):\n\t\tself.radius = radius\n \n\tdef get_area(self):\n\t\treturn pi * (self.radius ** 2)\n<\/code><\/pre>\n<p>Le code ci-dessus d\u00e9finit la classe <strong>Circle<\/strong>, qui utilise un constructeur et des m\u00e9thodes <strong>get_area()<\/strong> diff\u00e9rents.<\/p>\n<p>Bien que <strong>Circle<\/strong> h\u00e9rite de la classe <strong>Shape<\/strong>, vous pouvez red\u00e9finir chaque m\u00e9thode et l&rsquo;attribuer \u00e0 votre guise.<\/p>\n<h3>Classe Regular Hexagon<\/h3>\n<p>Nous avons seulement besoin de la longueur d&rsquo;un c\u00f4t\u00e9 d&rsquo;un hexagone r\u00e9gulier pour calculer son aire. C&rsquo;est similaire \u00e0 la classe <strong>Square<\/strong>, o\u00f9 nous ne passons qu&rsquo;un argument au constructeur.<\/p>\n<figure style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Hexagon-formula.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/06\/Hexagon-formula-300x165.png\" alt=\"Formule de l'aire de l'hexagone (Source d'image : BYJU'S)\" width=\"300\" height=\"165\"><\/a><figcaption class=\"wp-caption-text\">Formule de l&rsquo;aire de l&rsquo;hexagone (Source d&rsquo;image : BYJU&rsquo;S)<\/figcaption><\/figure>\n<p>Cependant, la formule est tout \u00e0 fait diff\u00e9rente, et elle implique l&rsquo;utilisation d&rsquo;une racine carr\u00e9e. C&rsquo;est pourquoi vous utiliserez la fonction <strong>sqrt()<\/strong> du module math\u00e9matique.<\/p>\n<pre><code class=\"language-python\"># Folded classes\nclass Shape: ...\nclass Rectangle(Shape): ...\nclass Square(Rectangle): ...\nclass Triangle(Rectangle): \u2026\nclass Circle(Shape): \u2026\n \n# Import square root\nfrom math import sqrt\n \nclass Hexagon(Rectangle):\n\t\n\tdef get_area(self):\n\t\treturn (3 * sqrt(3) * self.side1 ** 2) \/ 2\n<\/code><\/pre>\n<h3>Tester nos classes<\/h3>\n<p>Vous pouvez passer en mode interactif lorsque vous ex\u00e9cutez un fichier Python \u00e0 l&rsquo;aide d&rsquo;un d\u00e9bogueur. La fa\u00e7on la plus simple de le faire est d&rsquo;utiliser la fonction int\u00e9gr\u00e9e <a href=\"https:\/\/docs.python.org\/3\/library\/functions.html#breakpoint\">breakpoint<\/a>.<\/p>\n<p><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\"><strong>Note :<\/strong> Cette fonction n&rsquo;est disponible que dans Python 3.7 ou plus r\u00e9cent.<\/span><\/p>\n<pre><code class=\"language-python\">from math import pi, sqrt\n# Folded classes\nclass Shape: ...\nclass Rectangle(Shape): ...\nclass Square(Rectangle): ...\nclass Triangle(Rectangle): \u2026\nclass Circle(Shape): \u2026\nclass Hexagon(Rectangle): \u2026\n \nbreakpoint()\n<\/code><\/pre>\n<p>Maintenant, ex\u00e9cutez le fichier Python et jouez avec les classes que vous avez cr\u00e9\u00e9es.<\/p>\n<pre><code class=\"language-python\">$ python calculator.py\n \n(Pdb) rec = Rectangle(1, 2)(Pdb) print(rec)\nThe area of this Rectangle is: 2\n(Pdb) sqr = Square(4)\n(Pdb) print(sqr)\nThe area of this Square is: 16\n(Pdb) tri = Triangle(2, 3)\n(Pdb) print(tri)\nThe area of this Triangle is: 3.0\n(Pdb) cir = Circle(4)\n(Pdb) print(cir)\nThe area of this Circle is: 50.26548245743669\n(Pdb) hex = Hexagon(3)\n(Pdb) print(hex)\nThe area of this Hexagon is: 23.382685902179844\n<\/code><\/pre>\n<h3>D\u00e9fi<\/h3>\n<p>Cr\u00e9ez une classe avec une m\u00e9thode <strong>run<\/strong> o\u00f9 l&rsquo;utilisateur peut choisir une forme et calculer son aire.<\/p>\n<p><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">Une fois que vous avez relev\u00e9 le d\u00e9fi, vous pouvez envoyer une demande de modification au <a href=\"https:\/\/kinsta.com\/fr\/blog\/git-vs-github\/\">d\u00e9p\u00f4t GitHub<\/a> ou publier votre solution dans la section des commentaires.<\/span><\/p>\n\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=vmNem6wxfSQ\"><\/kinsta-video>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>La programmation orient\u00e9e objet est un paradigme dans lequel nous r\u00e9solvons les probl\u00e8mes en les consid\u00e9rant comme des <strong>objets<\/strong>. Si vous comprenez la POO de Python, vous pouvez aussi l&rsquo;appliquer facilement dans des langages comme <a href=\"https:\/\/kinsta.com\/fr\/blog\/meilleur-langage-programmation-apprendre\/#java\">Java<\/a>, <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-php\/\">PHP<\/a>, Javascript et <a href=\"https:\/\/kinsta.com\/fr\/blog\/meilleur-langage-programmation-apprendre\/#c-1\">C#<\/a>.<\/p>\n<p>Dans cet article, vous avez appris ce qui suit :<\/p>\n<ul>\n<li>Le concept d&rsquo;orientation objet dans Python<\/li>\n<li>Les avantages de la programmation orient\u00e9e objet par rapport \u00e0 la programmation structur\u00e9e<\/li>\n<li>Les bases de la programmation orient\u00e9e objet dans Python<\/li>\n<li>Le concept de <strong>classes<\/strong> et comment les utiliser dans Python<\/li>\n<li>Le <strong>constructeur<\/strong> d&rsquo;une classe dans Python<\/li>\n<li>Les <strong>m\u00e9thodes<\/strong> et <strong>attributs<\/strong> dans Python<\/li>\n<li>Les quatre piliers de la POO<\/li>\n<li>La mise en \u0153uvre de l&rsquo;<strong>abstraction<\/strong>, de l&rsquo;<strong>h\u00e9ritage<\/strong> et du <strong>polymorphisme<\/strong> dans un projet<\/li>\n<\/ul>\n<p>Maintenant, c&rsquo;est \u00e0 vous de jouer !<\/p>\n<p>Si vous avez aim\u00e9 ce guide, consultez notre article sur les <a href=\"https:\/\/kinsta.com\/fr\/blog\/facon-d-apprendre-python\/\">tutoriels Python<\/a>.<\/p>\n<p><em>Faites-nous part de votre solution \u00e0 ce d\u00e9fi dans les commentaires ci-dessous ! Et n&rsquo;oubliez pas de consulter notre <\/em><a href=\"https:\/\/kinsta.com\/fr\/blog\/php-vs-python\/\"><em>guide comparatif entre Python et PHP<\/em><\/a><em>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La programmation est un art. Et comme dans l&rsquo;art, le choix des pinceaux et des peintures appropri\u00e9s est essentiel pour produire les meilleures \u0153uvres. La programmation &#8230;<\/p>\n","protected":false},"author":181,"featured_media":47120,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[253,492],"topic":[1003],"class_list":["post-47112","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-programming","tag-python","topic-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Guide du d\u00e9butant pour la programmation orient\u00e9e objet (POO) en Python<\/title>\n<meta name=\"description\" content=\"Apprenez les tenants et aboutissants de la programmation orient\u00e9e objet (POO) de Python. Nous l&#039;expliquerons du concept \u00e0 l&#039;impl\u00e9mentation avec de nombreux exemples.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Guide du d\u00e9butant pour la programmation orient\u00e9e objet (POO) dans Python\" \/>\n<meta property=\"og:description\" content=\"Apprenez les tenants et aboutissants de la programmation orient\u00e9e objet (POO) de Python. Nous l&#039;expliquerons du concept \u00e0 l&#039;impl\u00e9mentation avec de nombreux exemples.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-05T11:39:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T12:12:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2021\/07\/programmation-orientee-objet-python.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Daniel Diaz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Apprenez les tenants et aboutissants de la programmation orient\u00e9e objet (POO) de Python. Nous l&#039;expliquerons du concept \u00e0 l&#039;impl\u00e9mentation avec de nombreux exemples.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2021\/07\/programmation-orientee-objet-python.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@DaniDiazTech\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Diaz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"21 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/\"},\"author\":{\"name\":\"Daniel Diaz\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2\"},\"headline\":\"Guide du d\u00e9butant pour la programmation orient\u00e9e objet (POO) dans Python\",\"datePublished\":\"2021-07-05T11:39:21+00:00\",\"dateModified\":\"2023-08-22T12:12:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/\"},\"wordCount\":4240,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2021\/07\/programmation-orientee-objet-python.jpeg\",\"keywords\":[\"programming\",\"Python\"],\"articleSection\":[\"D\u00e9veloppement web\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/\",\"name\":\"Guide du d\u00e9butant pour la programmation orient\u00e9e objet (POO) en Python\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2021\/07\/programmation-orientee-objet-python.jpeg\",\"datePublished\":\"2021-07-05T11:39:21+00:00\",\"dateModified\":\"2023-08-22T12:12:28+00:00\",\"description\":\"Apprenez les tenants et aboutissants de la programmation orient\u00e9e objet (POO) de Python. Nous l'expliquerons du concept \u00e0 l'impl\u00e9mentation avec de nombreux exemples.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2021\/07\/programmation-orientee-objet-python.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2021\/07\/programmation-orientee-objet-python.jpeg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Guide du d\u00e9butant pour la programmation orient\u00e9e objet (POO) dans Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2\",\"name\":\"Daniel Diaz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4541784060a3b28ffb67a5da67b1f7e7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4541784060a3b28ffb67a5da67b1f7e7?s=96&d=mm&r=g\",\"caption\":\"Daniel Diaz\"},\"description\":\"Daniel is a self-taught Python Developer, Technical Writer, and long-life learner. He enjoys creating software from scratch and explaining this process through stunning articles. Follow him on Twitter: @DaniDiazTech\",\"sameAs\":[\"https:\/\/developerroad.herokuapp.com\/\",\"https:\/\/www.linkedin.com\/in\/danidiaztech\",\"https:\/\/x.com\/DaniDiazTech\"],\"url\":\"https:\/\/kinsta.com\/fr\/blog\/author\/danidiaztech\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Guide du d\u00e9butant pour la programmation orient\u00e9e objet (POO) en Python","description":"Apprenez les tenants et aboutissants de la programmation orient\u00e9e objet (POO) de Python. Nous l'expliquerons du concept \u00e0 l'impl\u00e9mentation avec de nombreux exemples.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/","og_locale":"fr_FR","og_type":"article","og_title":"Guide du d\u00e9butant pour la programmation orient\u00e9e objet (POO) dans Python","og_description":"Apprenez les tenants et aboutissants de la programmation orient\u00e9e objet (POO) de Python. Nous l'expliquerons du concept \u00e0 l'impl\u00e9mentation avec de nombreux exemples.","og_url":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2021-07-05T11:39:21+00:00","article_modified_time":"2023-08-22T12:12:28+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2021\/07\/programmation-orientee-objet-python.jpeg","type":"image\/jpeg"}],"author":"Daniel Diaz","twitter_card":"summary_large_image","twitter_description":"Apprenez les tenants et aboutissants de la programmation orient\u00e9e objet (POO) de Python. Nous l'expliquerons du concept \u00e0 l'impl\u00e9mentation avec de nombreux exemples.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2021\/07\/programmation-orientee-objet-python.jpeg","twitter_creator":"@DaniDiazTech","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Daniel Diaz","Dur\u00e9e de lecture estim\u00e9e":"21 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/"},"author":{"name":"Daniel Diaz","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2"},"headline":"Guide du d\u00e9butant pour la programmation orient\u00e9e objet (POO) dans Python","datePublished":"2021-07-05T11:39:21+00:00","dateModified":"2023-08-22T12:12:28+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/"},"wordCount":4240,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2021\/07\/programmation-orientee-objet-python.jpeg","keywords":["programming","Python"],"articleSection":["D\u00e9veloppement web"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/","url":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/","name":"Guide du d\u00e9butant pour la programmation orient\u00e9e objet (POO) en Python","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2021\/07\/programmation-orientee-objet-python.jpeg","datePublished":"2021-07-05T11:39:21+00:00","dateModified":"2023-08-22T12:12:28+00:00","description":"Apprenez les tenants et aboutissants de la programmation orient\u00e9e objet (POO) de Python. Nous l'expliquerons du concept \u00e0 l'impl\u00e9mentation avec de nombreux exemples.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2021\/07\/programmation-orientee-objet-python.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2021\/07\/programmation-orientee-objet-python.jpeg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/programmation-orientee-objet-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/kinsta.com\/fr\/sujets\/python\/"},{"@type":"ListItem","position":3,"name":"Guide du d\u00e9butant pour la programmation orient\u00e9e objet (POO) dans Python"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/38f3b6be2225ef58d7914f1b6a70fcb2","name":"Daniel Diaz","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4541784060a3b28ffb67a5da67b1f7e7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4541784060a3b28ffb67a5da67b1f7e7?s=96&d=mm&r=g","caption":"Daniel Diaz"},"description":"Daniel is a self-taught Python Developer, Technical Writer, and long-life learner. He enjoys creating software from scratch and explaining this process through stunning articles. Follow him on Twitter: @DaniDiazTech","sameAs":["https:\/\/developerroad.herokuapp.com\/","https:\/\/www.linkedin.com\/in\/danidiaztech","https:\/\/x.com\/DaniDiazTech"],"url":"https:\/\/kinsta.com\/fr\/blog\/author\/danidiaztech\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/47112","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/181"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=47112"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/47112\/revisions"}],"predecessor-version":[{"id":69547,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/47112\/revisions\/69547"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/47112\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/47112\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/47112\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/47112\/translations\/pt"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/47112\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/47112\/translations\/nl"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/47112\/translations\/de"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/47112\/translations\/se"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/47112\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/47120"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=47112"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=47112"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=47112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}