{"id":5787,"date":"2024-08-29T05:56:37","date_gmt":"2024-08-29T05:56:37","guid":{"rendered":"https:\/\/wikiform.fr\/codespace\/proprietes-en-python-gestion-et-utilisation\/"},"modified":"2024-08-29T05:56:41","modified_gmt":"2024-08-29T05:56:41","slug":"proprietes-en-python-gestion-et-utilisation","status":"publish","type":"post","link":"https:\/\/wikiform.fr\/codespace\/proprietes-en-python-gestion-et-utilisation\/","title":{"rendered":"5.7 Propri\u00e9t\u00e9s en Python : Gestion et Utilisation"},"content":{"rendered":"\u00ab\u00a0`html\n\n<p><strong>Les propri\u00e9t\u00e9s en Python<\/strong> jouent un r\u00f4le crucial pour la gestion et l&rsquo;utilisation correctes des attributs d&rsquo;instance dans vos applications. Comprendre comment mettre en place et utiliser les <strong>propri\u00e9t\u00e9s en Python<\/strong> peut consid\u00e9rablement am\u00e9liorer l&rsquo;encapsulation et la maintenabilit\u00e9 de votre code. Apprenons comment elles fonctionnent et comment les impl\u00e9menter gr\u00e2ce \u00e0 des exemples concrets de code.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction aux <strong>Propri\u00e9t\u00e9s en Python<\/strong><\/h2>\n\n\n\n<div id=\"videoContainer\" style=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; background: #000;\">\n  <iframe src=\"https:\/\/player.vimeo.com\/video\/583360669?dnt=1&#038;fullscreen=0&#038;pip=0\" loading=\"lazy\" loading=\"lazy\" style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" frameborder=\"0\" allow=\"autoplay\" allowfullscreen id=\"vimeoPlayer\"><\/iframe>\n  \n  <!-- Popup Desktop -->\n  <div id=\"popupContainer\" class=\"desktop-popup\" style=\"display: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 90%; max-width: 400px; padding: 20px; border-radius: 10px; text-align: center; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); background-color: rgba(255, 255, 255, 0.95); box-sizing: border-box;\">\n    <h2 style=\"color: #333; font-size: 1.5em; margin: 10px 0;\" id=\"profitez-de-loffre-spciale-\">Profitez de l\u2019offre sp\u00e9ciale !<\/h2>\n    <p style=\"color: #e74c3c; font-size: 1.2em; margin: 10px 0;\">Obtenez notre cours pour seulement <strong id=\"price\">29.5\u20ac<\/strong> au lieu de <del>59\u20ac<\/del> !<\/p>\n    <a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144\" target=\"_blank\" style=\"display: block; padding: 10px 20px; background-color: #701CF5; color: #fff; text-decoration: none; border-radius: 5px; font-weight: bold; font-size: 1em; margin: 20px auto;\" rel=\"noopener\">Commencer maintenant<\/a>\n    <button onclick=\"closePopup()\" style=\"padding: 10px 20px; font-size: 1em;\">Fermer<\/button>\n  <\/div>\n\n  <!-- Popup Mobile -->\n  <div id=\"popupContainerMobile\" class=\"mobile-popup\" style=\"display: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80%; max-width: 300px; padding: 15px; border-radius: 10px; text-align: center; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); background-color: rgba(255, 255, 255, 0.95); box-sizing: border-box;\">\n    <p style=\"color: #e74c3c; font-size: 1em; margin: 5px 0;\">Cours sp\u00e9cial \u00e0 <strong id=\"priceMobile\">29.5\u20ac<\/strong> au lieu de <del>59\u20ac<\/del> !<\/p>\n    <a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144\" target=\"_blank\" style=\"display: inline-block; padding: 8px 15px; background-color: #701CF5; color: #fff; text-decoration: none; border-radius: 5px; font-weight: bold; font-size: 0.9em;\" rel=\"noopener\">Commencer maintenant<\/a>\n    <button onclick=\"closePopup()\" style=\"padding: 5px 10px; font-size: 0.9em;\">Fermer<\/button>\n  <\/div>\n<\/div>\n\n<script src=\"https:\/\/player.vimeo.com\/api\/player.js\"><\/script>\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n    var iframe = document.getElementById('vimeoPlayer');\n    var player = new Vimeo.Player(iframe);\n    var isPopupDisplayed = false;\n\n    player.on('play', function() {\n        if (!isPopupDisplayed) {\n            player.on('timeupdate', function(data) {\n                if (data.seconds >= 120 && !isPopupDisplayed) { \/\/ 120 seconds = 2 minutes\n                    \/\/ Pause the video and display the popup\n                    player.pause().then(function() {\n                        if (window.innerWidth > 768) {\n                            document.querySelector('.desktop-popup').style.display = 'block';\n                        } else {\n                            document.querySelector('.mobile-popup').style.display = 'block';\n                        }\n                        fetchPriceAndUpdatePopup();\n                        isPopupDisplayed = true;\n                    });\n                }\n            });\n        }\n    });\n\n    function fetchPriceAndUpdatePopup() {\n        fetch('https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144')\n            .then(response => response.text())\n            .then(html => {\n                var parser = new DOMParser();\n                var fetchedDoc = parser.parseFromString(html, 'text\/html');\n                var priceElement = fetchedDoc.querySelector('.ammount .fw-500');\n                var originalPriceElement = fetchedDoc.querySelector('.ammount del');\n                var price = priceElement ? priceElement.textContent.trim() : '29.5\u20ac';\n                var originalPrice = originalPriceElement ? originalPriceElement.textContent.trim() : '59\u20ac';\n\n                document.getElementById('price').textContent = price;\n                document.getElementById('priceMobile').textContent = price;\n                document.querySelector('.desktop-popup del').textContent = originalPrice;\n                document.querySelector('.mobile-popup del').textContent = originalPrice;\n            })\n            .catch(error => console.error('Error fetching the price:', error));\n    }\n\n    function closePopup() {\n        document.querySelector('.desktop-popup').style.display = 'none';\n        document.querySelector('.mobile-popup').style.display = 'none';\n        player.play(); \/\/ Allows resuming the video only after closing the popup\n    }\n});\n<\/script>\n\n\n\n<p>Les propri\u00e9t\u00e9s en Python permettent de d\u00e9finir des m\u00e9thodes pour acc\u00e9der et modifier les attributs d&rsquo;instance tout en encapsulant la logique n\u00e9cessaire. Elles offrent une mani\u00e8re transparente d&rsquo;ajouter des v\u00e9rifications et des transformations sans modifier la mani\u00e8re dont les attributs sont acc\u00e9d\u00e9s. Voyons comment les utiliser efficacement.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Utiliser les <code>property<\/code> pour G\u00e9rer les Attributs<\/h3>\n\n\n\n<p>La fonction int\u00e9gr\u00e9e <code>property<\/code> permet de transformer des m\u00e9thodes en attributs. Voici comment vous pouvez d\u00e9finir des propri\u00e9t\u00e9s pour g\u00e9rer les acc\u00e8s \u00e0 vos attributs d&rsquo;instance.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>class Temperature:\n    def __init__(self, temp=0):\n        self._temp = temp  # Attribut priv\u00e9\n\n    @property\n    def temp(self):\n        return self._temp\n\n    @temp.setter\n    def temp(self, value):\n        if value < -273.15:\n            raise ValueError(\"La temp\u00e9rature ne peut pas \u00eatre inf\u00e9rieure \u00e0 -273.15C\")\n        self._temp = value\n\n# Utilisation\nt = Temperature()\nt.temp = 100  # Utilise le setter pour v\u00e9rifier et assigner la valeur\nprint(t.temp)  # Utilise le getter pour acc\u00e9der \u00e0 la valeur\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Propri\u00e9t\u00e9s et M\u00e9thodes de Calcul<\/h3>\n\n\n\n<p>Les propri\u00e9t\u00e9s peuvent aussi \u00eatre utilis\u00e9es pour encapsuler des calculs complexes qui d\u00e9pendent de plusieurs attributs. Cela permet de simplifier l'interface de votre classe tout en restant flexible.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>class Rectangle:\n    def __init__(self, width, height):\n        self._width = width\n        self._height = height\n\n    @property\n    def area(self):\n        return self._width * self._height\n\n    @property\n    def perimeter(self):\n        return 2 * (self._width + self._height)\n\n# Utilisation\nrect = Rectangle(5, 10)\nprint(f\"Area: {rect.area}\")  # Renvoie 50\nprint(f\"Perimeter: {rect.perimeter}\")  # Renvoie 30\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Validation et Transformation avec les Propri\u00e9t\u00e9s<\/h3>\n\n\n\n<p>Les propri\u00e9t\u00e9s offrent un moyen pratique pour valider et transformer les donn\u00e9es re\u00e7ues. Vous pouvez ainsi \u00e9viter les laxismes typiques de certains sets d'attributs.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>class Person:\n    def __init__(self, name):\n        self._name = name\n\n    @property\n    def name(self):\n        return self._name\n\n    @name.setter\n    def name(self, value):\n        if not value.strip():\n            raise ValueError(\"Le nom ne peut pas \u00eatre vide\")\n        self._name = value.title()  # Capitalise chaque mot\n\n# Utilisation\np = Person(\"john doe\")\nprint(p.name)  # Affiche \"John Doe\"\np.name = \"jane\"\nprint(p.name)  # Affiche \"Jane\"\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Utiliser les Propri\u00e9t\u00e9s pour G\u00e9rer les Attributs Cach\u00e9s<\/h3>\n\n\n\n<p>Les propri\u00e9t\u00e9s peuvent \u00eatre particuli\u00e8rement utiles lorsqu'il faut g\u00e9rer des attributs cach\u00e9s ou priv\u00e9s, permettant de contr\u00f4ler leur acc\u00e8s et modification avec pr\u00e9cision.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>class BankAccount:\n    def __init__(self, balance=0):\n        self._balance = balance\n\n    @property\n    def balance(self):\n        return self._balance\n\n    @balance.setter\n    def balance(self, amount):\n        if amount < 0:\n            raise ValueError(\"Le solde ne peut pas \u00eatre n\u00e9gatif\")\n        self._balance = amount\n\n    @balance.deleter\n    def balance(self):\n        del self._balance\n\n# Utilisation\naccount = BankAccount()\naccount.balance = 100  # D\u00e9finir le solde\nprint(account.balance)  # Affiche 100\n\ndel account.balance  # Supprime le solde\n# print(account.balance) # Provoquerait une erreur\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Des Propri\u00e9t\u00e9s Red\u00e9finies avec <code>property<\/code><\/h3>\n\n\n\n<p>Si vous pr\u00e9f\u00e9rez, vous pouvez utiliser la fonction int\u00e9gr\u00e9e <code>property<\/code> pour un contr\u00f4le plus pr\u00e9cis lors de la cr\u00e9ation des getters, setters et deleters.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>class Circle:\n    def __init__(self, radius):\n        self._radius = radius\n\n    def get_radius(self):\n        return self._radius\n\n    def set_radius(self, value):\n        if value <= 0:\n            raise ValueError(\"Le rayon doit \u00eatre positif\")\n        self._radius = value\n\n    def del_radius(self):\n        del self._radius\n\n    radius = property(get_radius, set_radius, del_radius, \"Le rayon du cercle\")\n\n# Utilisation\nc = Circle(5)\nprint(c.radius)  # Affiche 5\nc.radius = 10\nprint(c.radius)  # Affiche 10\n\ndel c.radius\n# print(c.radius) # Provoquerait une erreur\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Utiliser les Propri\u00e9t\u00e9s pour Maintenir une Logique M\u00e9tier<\/h3>\n\n\n\n<p>En encapsulant la logique d'acc\u00e8s et de modification des attributs via des propri\u00e9t\u00e9s, vous pouvez facilement mettre \u00e0 jour les r\u00e8gles m\u00e9tier sans toucher au reste de votre code.<\/p>\n\n\n\n<pre class=\"wp-block-code lang-python\"><code>class Employee:\n    def __init__(self, name, salary):\n        self._name = name\n        self._salary = salary\n\n    @property\n    def name(self):\n        return self._name\n\n    @property\n    def salary(self):\n        return self._salary\n\n    @salary.setter\n    def salary(self, value):\n        if value < 30000:\n            raise ValueError(\"Le salaire doit \u00eatre plus \u00e9lev\u00e9\")\n        self._salary = value\n\n    @property\n    def annual_bonus(self):\n        return self._salary * 0.1\n\n# Utilisation\nemp = Employee(\"John Doe\", 50000)\nprint(emp.name)  # Affiche \"John Doe\"\nprint(emp.salary)  # Affiche 50000\nprint(emp.annual_bonus)  # Affiche 5000\n\nemp.salary = 70000  # Modifie le salaire\nprint(emp.annual_bonus)  # Affiche 7000\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion sur les Propri\u00e9t\u00e9s en Python<\/h2>\n\n\n\n<p>Les <strong>propri\u00e9t\u00e9s en Python<\/strong> offrent une mani\u00e8re puissante et flexible de g\u00e9rer les attributs d'instance dans vos classes. En exploitant leurs capacit\u00e9s, vous pouvez ais\u00e9ment ajouter de la logique m\u00e9tier, valider les donn\u00e9es et maintenir un code propre et maintenable. Pour approfondir vos connaissances en Python et d\u00e9couvrir davantage de pratiques avanc\u00e9es, n'h\u00e9sitez pas \u00e0 explorer nos autres ressources comme <a href=\"https:\/\/wikiform.fr\/codespace\/structure-conditionnelle-if-else-en-python\">Structure conditionnelle if-else en Python<\/a> et <a href=\"https:\/\/wikiform.fr\/codespace\/utiliser-les-operateurs-mathematiques-en-python\">Utiliser les op\u00e9rateurs math\u00e9matiques en Python<\/a>.<\/p>\n\n\n\n<a href=\"https:\/\/wikiform.fr\/application\/learnify\/home\/course\/devenir-un-d%C3%A9veloppeur-python\/144\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/wikiform.fr\/codespace\/wp-content\/uploads\/2024\/07\/learnify-formation-PYTHON-offre-50.gif\" loading=\"lazy\" alt=\"Learnify Formation Python Offre 50%\" title=\"\"><\/a>\n\n```","protected":false},"excerpt":{"rendered":"<p>\u00ab\u00a0`html Les propri\u00e9t\u00e9s en Python jouent un r\u00f4le crucial pour la gestion et l&rsquo;utilisation correctes des attributs d&rsquo;instance dans vos applications. Comprendre comment mettre en&#8230;<\/p>\n","protected":false},"author":4,"featured_media":2950,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[24],"tags":[18],"class_list":["post-5787","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-tutoriels"],"acf":[],"_titre_de_la_formation":null,"_description_":null,"_objectifs_pedagogiques":null,"_programme_":null,"_url_de_limage":null,"_materiel_necessaire":null,"_modalites_devaluation_des_acquis":null,"_moyens_pedagogiques_et_techniques":null,"_accessibilite_":null,"_formateur_":null,"menu_order":0,"_links":{"self":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5787","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/comments?post=5787"}],"version-history":[{"count":1,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5787\/revisions"}],"predecessor-version":[{"id":5788,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/posts\/5787\/revisions\/5788"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media\/2950"}],"wp:attachment":[{"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/media?parent=5787"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/categories?post=5787"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wikiform.fr\/codespace\/wp-json\/wp\/v2\/tags?post=5787"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}