Session du 29 octobre 2025 à 21h00
Bases du Langage
TOSA & Certifications
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Décorateurs Python et refactorisation élégante
Découvrez comment utiliser les décorateurs en Python à partir d’un exercice concret de tri de fichiers, et comparez différentes approches de structuration du code.
00:01:00 :Le concept global est un peu complexe mais les décorateurs en soi ça reste ça.Sans plus tarder, je vais commencer à partager le premier écran.
00:01:11 :Un petit instant, je suis en plein réglage.Ah, désolé, on va avoir un petit souci. Alors, je me déconnecte deux minutes, je reviens.Parce qu'en fait j'aurais du faire ça et ça va poser problème. Je m'absente un instant.
00:02:07 :Alors, si jamais vous voyez que ça quitte la session, relancez-moi sur Discord et essayez de me reconnecter.Je vais faire comme ça pour éviter la coupure de la session.
00:02:22 :A tout de suite.A tout de suite.On ne t'entend pas par contre.C'est bon.Vous m'entendez ?Oui.Ok, j'électrifie mes caméras.Allez, on est parti.
00:03:46 :Ça marche toujours en bible.On va essayer de quitter de ce côté-là.Est-ce que ça va mieux ?Vous m'entendez toujours ?Oui.Allez, on est parti.
00:04:04 :Donc, alors, on va commencer par celui-là.J'ai pas mal basculé entre les fenêtres.Parce que j'ai préparé ça de sorte que ça soit le plus...
00:04:28 :Par contre, on ne voit pas ton écran.Ça va venir.Voilà.C'est normal.Hop là.C'est bon.Alors, là, je pense que vous êtes sur le fichier de base.
00:04:42 :Alors, je vais vous montrer.On va partir sur le fichier, sur l'exercice du trieur de fichiers.Je ne sais pas si vous avez eu l'occasion de le faire dans le cadre du parcours de Doug Strigger.
00:04:53 :Donc, c'est un petit exercice à la base qui est tout simple,qui vous donne un dossier avec divers fichiers du type mp3, mp4, ainsi de suite.
00:05:02 :Et là, on vous demande de créer un petit algorithme pour trier ces fichiers.D'accord ?Est-ce que vous avez déjà eu l'occasion de faire ce fichier-là ?
00:05:13 :Oui, mais il y a quelques mois en arrière.Ouais, pareil.Voilà.Donc, ça, c'est la solution que Thibault propose dans le commentaire.Il y a quelqu'un qui a...
00:05:29 :Alors, par contre, si vous avez quelque chose, prenez le micro,parce qu'avec le nombre d'écrans et le nombre de fenêtres que j'ai été obligé de gérer,d'autrement, je ne peux pas voir le chat.
00:05:41 :Donc, n'hésitez pas, prenez le micro.Donc, je continue.Donc, la solution de Thibault, c'est une excellente solution, attention,part sur un dictionnaire et en ciblant des clés sur ce dictionnaire,on va déterminer dans quel dossier on va devoir mettre ce fichier.
00:06:01 :D'accord ?Donc, ça, c'est la solution finale qui est proposée souvent en correction,enfin, qui ne est pas souvent proposée,qui est proposée en correction pour l'exercice.
00:06:11 :Donc, celle-là, on va l'oublier.J'ai recopié une autre version qui colle plus ou moins à ce qu'on peut voir des foisdans certaines propositions,c'est-à-dire qu'au lieu d'utiliser un dictionnaire,on va utiliser une série de i, p, i, f et s.
00:06:27 :D'accord ?Donc, là, le concept, il est relativement simple.On va parser sur les fichiers.On récupère d'abord les fichiers qui sont dans le dossier.
00:06:39 :Donc, le dossier qui est noté ici se remonte ici, comme base dire.Donc, là, il se trouve sur mon bureau dans le dossier data.D'accord ?
00:06:48 :Je vais désigner un dossier type qui sera data sorted.Ça, ce n'est pas obligatoire dans l'exercice à la base.Ne le prenez pas trop en compte,je l'ai juste fait pour qu'on s'évite parce qu'on va faire plusieurs essaiset plusieurs exécutions du code.
00:07:05 :Et c'est pour éviter d'avoir à chaque fois à recourir chaque dossierquand les fichiers ont été traités,de les recopier dans le dossier source et ainsi de suite.
00:07:11 :Donc, c'est par solution de facilité.Donc, je reviens à la logique.Ici, on parcourt le dossier.On regarde tous les fichiers qui sont dedans.Avec le module passfib et la méthode suffix,on va récupérer les extensions des fichiers.
00:07:30 :Et donc, si l'extension se trouve parmi les listes qui sont mentionnées ici,ça donne la fonction à exécuter.Donc, en appliquant le fichier et le dossier d'estimation.
00:07:45 :Donc, je vais se dire que je rappelle qui est ici.Chaque fonction est faite comme suit.On va prendre l'exemple de Copy to Music.Copy to Music prend en paramètre le fichier et le dossier d'estimation.
00:07:59 :Il va décider un dossier cible qui va s'appeler musique.Et là, il va retourner sur une fonction qui est centrale.Donc, vous retrouvez dans tous les dossiers Copyqui permet en prenant en paramètre le fichier,le dossier d'estimation et le dossier cible,de créer le dossier correspondant si nécessaire
00:08:22 :et de mettre le fichier dans le dossier cible.Est-ce que là, c'est bon pour tout le monde ?Oui.Yes.On va faire une petite exécution.
00:08:35 :OK, tout se passe bien.Je vais basculer pour vous montrer le dossier cible.Hop.Alors, il est ici.Voilà.On retrouve bien.Non, c'est pas celui-là.
00:09:03 :C'est celui-là.C'est moi qui vais avoir du mal à naviguer.Crac.Crac.Voilà.Donc, on a bien nos dossiers qui sont créés.Documents, images, musiques, diverses vidéos.
00:09:18 :Et si on regarde à l'intérieur,on voit bien que nos fichiers ont été mis en fonction des extensions.D'accord ?Donc, on a exactement le même fonctionnementqu'avec le script que Thibault propose en connexion,mais fait de manière un peu différente.
00:09:35 :Et vous vous en conviendrez, c'est un peu lourd,parce que qu'est-ce qui est lourd en termes de programmation à cette solution ?Alors, je supprime ça.
00:09:42 :On va rebasculer sur le code.Crac.Crac.Hop.Voilà.Normalement, vous êtes revenus sur le code à l'écran.Est-ce que vous pouvez me confirmer ?
00:09:57 :Oui.OK.Donc, qu'est-ce qui est lourd en termes de code ?Alors, le fait qu'on ait ces deux fonctions,c'est pas forcément hyper propre sans soi.
00:10:06 :Mais bon,les fonctions posent pas trop de problématiques.Ce qui pose des problématiques en termes de codeen termes de lourdeur et de souplesse,c'est cette fameuse série de IF-S.
00:10:18 :Parce que là,bon,on a 5 options.D'accord ?Donc, à savoir, soit ça va dans musique,soit ça va dans vidéo,soit dans images, soit dans documents,soit on l'envoie dans la fichier d'idée.
00:10:30 :OK ?Mais admettons que, par exemple,dans le fichier,alors là, je vais vous demander de me prendre ces paroles.Il y a des fichiers qui sont, par exemple, du CSS et de l'HTML.
00:10:42 :Et que je décide de faireune option supplémentaire pour dire queje veux placer dans un dossier fichier web, par exemple.Là,il faut que je rajoute un IF.
00:10:54 :Si.Et,je vais mettre mes feuilles suffixes.Alors,suffixe.Que je crée ma liste.Alors,avec mespointsCSS,Google,voilà,HTML, JS.Et que je dispose un copy to,je vais créer une nouvelle fonction.
00:11:28 :Allez, on va l'appeler Webfile.OK.Ça reste un peu mieux.Et je remonte en haut.Je recrée ma fonction.Def, copy to Webfile, fichier web etainsi de suite.
00:11:47 :Et ça,je vais devoir recommencer cette actionà chaque fois que je vais vouloirfaireun nouvel affinage de trieoudire, tiens, je vais sélectionner tel type de dossier,je vais les mettre, tel type de fichier, je vais les mettre dans ce dossier-là.
00:12:02 :Ou tel type de dossier.Typiquement,on va revenir sur les modifications,donc on ne va pas conserver ça.Voilà, on ne va pas trop se compliquer les choses,c'est déjà pas mal compliqué pour ce soir.
00:12:15 :Il me semble là,je supprime le fichier.Typiquement,je veuxrajouter,tiens, j'ai pris les ADI,les MP4, les glyphs.Par exemple,je veux rajouter les MPEG dans les fichiers vidéo.
00:12:32 :Il faut que j'aille retrouver dans mon hélice,que j'aille remettre mes MPEGpour qu'ils considèrent mes MPEGet les mettent dans le fichier vidéo.Donc,le script est fonctionnel,il n'y a pas de souci,maissi je dois le faire résoudre dans le temps,ça va être très vite compliqué
00:12:49 :parce que je vais être obligé à chaque foisde manière assez granulaire,aller revoir dans mon code,soit rajouter un hélice,soit rajouterune sélection dans la listepour le mettre dans le script.
00:13:02 :Et vous imaginez bien que dans le sens,ce genre de script,si on le fait vivre assez longtemps,qu'on le modifie assez souvent,on va très vite arriver à générer des erreurset surtout,le script risque de devenir tellement complexequ'à trouverd'où vient l'erreur,ça va être compliqué.
00:13:22 :Donc là, la solution qu'on va aborder ce soir,elle va être justement,au final,on va passer par plusieurs phases,mais au final,l'idée, ça va êtrede faire un scriptqui sera extrêmement modulableet qui va mêmes'auto-gérer tout seul d'une certaine manière.
00:13:48 :Vous allez voir,vous allez découvrir au fur et à mesurede l'histoire.Je sauvegarde ça,voilà,et on va continuerun petit peu là-dessus.La première chose qu'on va faire,on va créerune forme de dictionnairequi va nous permettred'appeler les fonctions en fonction des clés.
00:14:19 :Donc là, on va se rapprocherde la solution que Thibaultpropose dans la correction.Pour cela, on va utiliser des modules.On va utiliser vraiment le module Typing.
00:14:29 :Je vais l'importer.Je vais importerle module Any et Collable.Maintenant que j'ai fait ça,je vais définirdeux nouveaux types.Ça va me permettre de définirdeux types de données.
00:14:55 :Le premier typeque je vais définir,c'est un type que je vais appeler Data.Dedans, qu'est-ce que je vais mettre ?Je vais mettre un dictionnairequi va pouvoirprendre comme clédes strings, peu importe.
00:15:16 :Ensuite, je vaisrajouter un export SMÇa va être un objetqui est appelable.Je vais rajouter dans mon typeune Collable.Et lui, qu'est-ce qu'il va faire ?
00:15:33 :Il va avoir en entrée un DATAet comme cléet comme valeur, un PASS.Donc, la direction vers une fonction.Vous n'attardez pas tropsur la définition des deux types.
00:15:47 :On pourra voir ça plus tardsi ça vous intéresse.Là, c'est vraiment une clépour que vous compreniezjusqu'où on peut aller avec les décorateurs.
00:15:57 :Donc là, c'est la première.Sur la première phase, on va faire ça.Ensuite, qu'est-ce qu'on va faire ?Pour pouvoir utiliser ça,on va créerun premiersélecteur.
00:16:13 :D'accord ?Je retrouve mes notes parce quej'ai pris beaucoup de notes pour ce soir.Et voilà.Je vais le créer ici.Ici, c'est bon.
00:16:27 :Merci.Donc, mon sélecteur,qu'est-ce que ça va être ?Je vais lui dire que ça va être un objetde type dictionnairequ'en première clé, il va prendreune stringet en deuxième, il va prendreun exportFn.
00:16:49 :C'est l'objet qu'on vient de créer juste au-dessus.D'accord ?Et donc, là, il me crée le sélecteur.Il me le type en dictionnaire avec ces valeurs-là.
00:16:57 :Et il me crée un dictionnaire.Maintenant,ce que je vais faire,c'est que, hop là,juste en dessous de mes fonctions,ici,je vais créer...
00:17:13 :Alors, je vais remettre ici plutôt le dictionnaire. Pardon.Ça sera mieux.Voilà.Sinon, ça va poser un petit problème.On va hurler parce qu'il y a des trucs qui connaissent pas.
00:17:23 :Ici, on le met ici.Voilà.Maintenant, ce dictionnaire vide,je vais le remplir.On va commencer par mettre...Alors, normalement,grâce à Copayas, ça va aller vite. Voilà.
00:17:37 :On metl'OMP3 copiévers la musique, les points V copiés vers la musique,et ainsi de suite. OK ?Là, par exemple, on a rajouté les points Pages.
00:17:47 :Et puis, si on veutrajouter par la suite,on va reprendre notre exempledont on avait parlé. Si je metsles points CSS,hop, je peux direque les points CSS, je veux un copietoWebfile.
00:18:07 :La fameuseextension supplémentaireque je vous avais parlé tout à l'heure.On peut en rajouter au fur et à mesure.On va pas aller jusque-là, on va laisser ça.
00:18:17 :On va rester au fonctionnement nominaldu fichier.Donc là, qu'est-ce que ça importe ?Eh bien, là, déjà,tous nos IF, END, IF,ELSE, et ainsi de suitevont être remplacéspar ça.
00:18:33 :Pourchaque fichier dans chaque fichier, on va d'abord créerun sélector. Le sélector,qu'est-ce que ça va être ?Ça va être une forme,ça va être une fonction,d'accord, qui va être créée commesuite. On va utiliser
00:18:49 :le selectors en pluriel, donc notredictionnaire qu'on avait en haut.On va lui dire d'aller chercherdans l'accès,dans le dictionnaire, l'accès qui correspondà l'extension du fichier.
00:19:01 :D'accord ?On prévoitun cas d'erreur,parce que si jamais on a une extension de fichier qu'on n'avaitpas nommé, on ne se retrouve pasavec une erreur.
00:19:13 :Et ensuite,ce sélector, on va l'utiliser commeune fonction. Tout bêtement.Alors, je vaissupprimer nos IF, END, X qui nous serventplus.Vous allez voir déjà la place qu'on a faitsur le...
00:19:31 :Qu'est-ce qu'il ne va pas............Il faut que je mette ça, sinonPython hurle.Voilà.Donc déjà, regardezl'améliorissement qu'on a fait faire à nosIF, END, X rien qu'avec ça.
00:19:57 :Donc on a toujours notre dictionnaire,sauf quele choix de la fonction à utiliserest généré par ce sélecteur-là.D'accord ?Ici,on crée notre fonction. Alors cette variable
00:20:11 :devient une fonction.Et on utilise la fonctionen y passant les paramètresfile et desdir.Et sans avoir besoin de les nommersystématiquement,on va bien aller pointer verscopy to video, copy to music,copy to image, et ainsi de suite.
00:20:29 :On va tester ça.Alors, je vais revenir.Alors, j'ai déjà réaffichéle dossier.Tac, tac, tac.Voilà.Là, c'est le datatique,forcément.Voilà.Alors.OK.
00:20:59 :Alors,je vous bascule vers l'affichagedu dossier.Tac.C'est celui-là.OK. Donc vous voyez, j'ai tous mesfichiers qui sont dans mon dossierdata en PML.
00:21:19 :D'accord ?On basculesur le dossiersortie.OK.Le dossier sorti,vous êtes d'accord avec moi qui le guide.Je vais lancer le script.Et boum.
00:21:39 :Tout a été créécomme préalablement.OK.Donc on n'a rien changéintrinsèquementà l'effet que produit Matrix.Mais par contre,on va repartager le code.
00:21:57 :Tac.Ici.Voilà.Par contre, comme vous le voyez,là, au niveaude la fonction principale, on a fait faireune sacrée cure d'amaigrissement.On est déjà sur quelque chosequi est un petit peu plusefficace.
00:22:21 :Et quisurtout évite de nous sortirdu panier de X et Yqui, en termes de code, coûtegénéralement assez cher en temps d'exécution.Donc là, en fait, on a optimiséle code avec ça.
00:22:37 :On a déjà commencé à optimiser le code.Mais on n'a pas fini.On n'a pas fini.Là,on a fait ça, c'est la première phase.
00:22:47 :Donc déjà, on a quand même déjà gagnébeaucoup de choses. Maintenant, moi, ce qui m'embêtedans tout ça,c'est qu'on a encore ce dictionnaire.Donc,techniquement, à chaque fois,je veux rajouter une extension.
00:23:01 :Je suis obligé de rajouter une entrée dans le dictionnairepour la lier à la fonction.OK ?C'est pas mal, maisça m'oblige à maintenir ce dictionnaireen plus de maintenir la fonction.
00:23:13 :Et ainsi de suite.Donc maintenant, on va passer à laphase 2. Et là, c'est làqu'on va commencer à travailleravec nos décorateurs.On va commencer paraller chercher un petit modulequeceux qui étaient la semaine dernière ont vu.
00:23:33 :Le petit module VRAPS.OK ?Pour la blague, c'est pas un petit repas mexicain.C'est bien un module de pizza.Il fallait que je la fasse.
00:23:45 :Désolé.Donc,ce coup-ci,on va recréernotre dictionnaire,comme on l'a fait tout à l'heure,mais on va le créer.Donc, on va le créer avec notre CélèbCorse,le PLAC,le Tricode.fm,
00:24:07 :et l'ID. Et là,maintenant, ce dictionnaire, il va sur-exister,mais on ne va pluss'en occuper.C'est-à-dire que le dictionnaire qui est en bas,ici, là,pas de pitié pour les croissants,hop, on le supprime.
00:24:23 :Terminé. On n'y revient plus.Et là, on va créer notre décorateurqui va nous permettrede déjàindiquer comment on va traiterle fichier en fonction des extensions,mais qui va aussiaiderà la créationdu dictionnaire.
00:24:47 :Je vais vous montrer ce décorateur.Alors,on va l'appeler, voilà.On va rester sur ce queil va me ressortir le code que j'ai préparétout à l'heure, donc on ne va pas s'embêter, voilà.
00:25:01 :Clac.Donc, ce petit décorateur,pour ceux qui n'avaient pas vu le décorateur,c'est une sorte de fonctiondans une fonctionqui, grâce notamment au décorateurBRAPS qui est ici, permet de renvoyerune fonction. Je vais déclarer un petit peu ce qu'il fait.
00:25:19 :Là, leregistre sélecteur nous prend en paramètreun suffixe qui va être une chaînede caractères.Il vautiliser une fonction qu'on va appelerdécorateur qui va, alors j'essaie de ne passe repasser à soi-dessus parce que sinon,vous avez l'application,enfin, les codeset les informations,qui va prendre en paramètre une fonction
00:25:43 :qui va être une fonction de typeexport SN, donc notre typequ'on adéfini plus haut et quirenvoiera unélément de type export SN.
00:25:55 :Le BRAPS va prendre la fonction,il va créer un wrappeur, doncune nouvelle fonction, entre guillemets,dans lequel il va passerles paramètres data des dire,d'accord, donc le data, c'est de ladata, c'est du string, donc là, ça va être notre suffixe,le désir, c'est un pat,donc pas de souci,
00:26:13 :et il va renvoyerla fonction avecles bons paramètres, d'accord ?Et qu'est-ce qu'il va faire ?Vous le voyez ici.Il va créer le sélecteur,l'indice du suffixe,et il va lui donnercomme valeur le wrappeur, c'est-à-dire la fonctionqu'on vient de créer.
00:26:33 :Donc, en fait,ici, vous ne le verrez pas visuellement,mais techniquement,il va aller renseignerdans le dictionnaire qui est ici,il va ajouter la fonction. Comme tout à l'heure
00:26:45 :on l'a fait, par exemple,il va créer une clé .tdset va lui dire,ça correspond à la fonctioncopy to document.Et donc maintenant,là j'ai ma fonction telle quelle,vous voyez, je n'ai encore aucundécorateur. Je vais basculer.
00:27:05 :Alors, tenez-moi un petit instantque je bascule sur les différentes fenêtreset que je vous remette ça.Je n'ai pas réussi à comprendre commentil peut détecter que c'estpar exemple le pointmp3, il va forcément avecmusique, le point mp4, il va forcément avec vidéoet tout ça. On va y venir.
00:27:23 :D'accord. On va y venir.Alors,tac, tac, hop,ça se met à vide.On y arriveun petit instant.Tac.Voilà.Là,voilà.Tac.Là, je vais vous montrer.
00:27:55 :J'ai à nouveau remplimon fichierde fichier mixé.D'accord.Là,je bascule sur la fenêtresortie.Et je lancele script. Vous allez voir ce qui se passe
00:28:17 :dans le dossier.Ça ne sert à rien.D'accord. Parce que là,on n'a pas encore activé les choses.Le script s'est bien exécuté.Hop. Je rebascule.
00:28:35 :Voilà.On a créé l'exploiteur, maison ne l'a mis nulle part.Voilà. Pour l'instant, rien ne se passe.Mais il y a déjà une bonne chose, c'est que notre fonction,vous voyez, elle ne présente pas de défautde fonctionnement. C'est-à-dire qu'il n'y a pas
00:28:55 :de veuil en soi.Maintenant, comment on va fairepour que les fichierssoient créés ? Eh bien, tout simplement,on va ajouter nos décorateurssur les diverses fonctions.
00:29:07 :Alors, on va prendre par exemplela musique.On va commencer avec le MP3.Donc, je vais l'ajouterà RegisterSelector.mp3.OK.Pareil avecles web, pareil avec les slacks.
00:29:23 :On va fairepour les vidéos.Hop.Faites que le Compilote nous fait le travail à moitié.OK.Ça, c'est fait.OK. Voilà.Donc là, vous voyez, pour chaquetype de document que je veux traiteravec telle fonction,j'ai rajouté un décorateur qui correspond.
00:29:49 :OK.Je vais vous représenter le fichierDataParticle. On va relancer la fonction.OK.Je relance.Et boum !Il m'a bien créé mes fichiers, il m'a bien sorti.
00:30:15 :Ce qui fait que maintenant, là, j'ai un scriptqui est parfaitement maintenable.Je vaisvous expliquer ça en détail.OK.Donc là, vous voyez sur le script,j'ai gérémes différents types de dossiers.
00:30:37 :Admettons,je veux quemaintenant...Alors, je ne vais pascréer une fonction pour ne pas compliquer le fichier.Mais je vais décider que, par exemple,les fichiers CSS et HTML que je parlais tout à l'heure,moi, je pense que c'est plusdes documentsque des fichiers libérés.
00:30:57 :Donc,pour qu'ils me les prennent dans mes documents,la seule modification que j'ai à faire maintenant,je rajoute unsélecteur, un registreur sélecteur.Et je lui disva-t-il mettre maintenant les CSS.
00:31:17 :Et voilà.J'ai amélioré le script.Et ça, je peux, du coup, pour chaque extension,j'ai juste à rajoutersur la bonne fonctionle décorateur avec la bonne extension.
00:31:39 :Et je n'ai plus besoin de manipuler un dictionnaire,plus besoin de manipuler, de créer une fonction spécifique,plus besoin de rajouter un message.J'ai juste à rajoutermon décorateur.
00:31:51 :Est-ce que j'ai perdu tout le mondeou est-ce que c'est clair?C'est clair.Alors, moi, tu m'as complètement perdu, mais bon,je n'ai pas vu lesdécorateurs, donc c'estun peu normal.
00:32:09 :Je regarderailes précédentessessions.Pour t'expliquer rapidement avant,en fait, le décorateur,qu'est-ce qu'il fait?On va prendre le sélecteur,par exemple, .mp3, d'accord?Il prend en paramètrela fonction qui est en dessous de lui.
00:32:29 :Donc ici, typiquement, copy to music.Il remontedans ce décorateur cette fonction spécifiquequ'on a créée ici.Donc le premier paramètre qu'il avait,c'est .mp3, ça correspond au suffixe.
00:32:41 :La fonctiondécorateur, il prend la fonctionqui est copy to music, d'accord?Il la transformeen objet export fn.Ensuite,il va créer une fonction, alors levrap, c'est le rapport, il ne faut pas tenir compte de ses noms,parce qu'en fait, c'est juste les notions internes pour le langage Python.
00:32:59 :Il va créer,donc ici, une fonction qui va s'appelercopy to music.Il va lui dire qu'en paramètre, tu passesun data affiché,ici un désir, qu'il arécupéré au moment où il a interceptéla fonction.
00:33:15 :Il crée l'entrée dans le dictionary,il retourne la fonction, il retournele décorateur, et il exécute.En fait,si tu veux, le décorateur, il sertà rajouter des actions supplémentaires,modifier l'actioninitialement prévue pour la fonctiond'une certaine manière.
00:33:33 :Du coup, l'avantage, c'est qu'il peut faire çaOn peut prévoir desmodifications, des variantements de fonctionsqu'on applique ou nonselon notre besoin, notre nécessité.
00:33:43 :Mais, à un certain moment,on sait qu'on va utiliser ce variantementrégulièrement, on crée un décorateurce qui permet de pouvoir le réutiliserplusieurs fois dans le code aux endroits qui ont un code déjà.
00:33:53 :Est-ce que c'est plus clair pour toi,Alban, par exemple ?Oui, c'est clair.Ce que je voulais dire, c'étaitlà, comme tu l'expliques, c'est très clair,dans ton exemple,c'est clair. Après, si
00:34:07 :demain je suisconfronté àdu code, etc.,voir qu'il va me falloir un décorateur,c'est là que çava pas forcément être évident pour moi.
00:34:19 :Mais,je pense que je travaille avec...Tout ça, ça passe dans l'espacede refactorisation, d'étude du code,de recherche de performance,et ainsi de suite.
00:34:31 :En fait, le décorateur,on l'utilise quand on voit qu'il y aune fonctionqui peut être plus ou moinslongue, qui peut être réutiliséeà plusieurs endroits différents dansle code. C'est là où on
00:34:45 :s'aperçoit que le décorateur peut être utile.C'est-à-dire qu'au lieud'appeler la fonction, tu décores la fonctiond'une autre fonction avec cette fonction-là.C'est un peuplus simple dans l'écriture du code et un peu plussimple dans l'utilisation globale.
00:34:59 :Et donc là,maintenant,pourquoi j'ai pris cet exercice ?Parce que ce n'est pas tout à fait par hasard.Ce qu'on vient de construire là,ça correspond à un design paterne.
00:35:13 :Alors, est-ce que vous avez déjà entendu parlerdu design paterne ?J'ai déjà entendu le mot, mais après,je ne sais pas, trois fois, c'est fonctionnel.
00:35:23 :Alors,voilà, plus ou moins.Le design paterne, ça a étédéfini par ce qu'on appellele Gang of Four,ces quatre codeurs-développeursd'autres relais,qui ont remarqué querégulièrement,dans les codes,au travers de différents langages,on répétait certains schémas.
00:35:47 :D'accord ?Et donc, ils ont théoriséet défini ces schémasque l'on appelle maintenantcomme les design paterne.Donc, c'est les modèles de conception.D'accord ?
00:36:03 :Et là, sans vous en douter,vous venez de voir le design paternequ'on appelle le registry,qui permet tout simplementde créer un registrepour sélectionnerdes actions ou des fonctionsdans un code.
00:36:19 :Et donc, vous pouvez imaginer derrière çatoute la puissance qu'il y a sur Python.Parce que là, on va continuer surla modularité de notre exemple.
00:36:33 :Je vais revenirsur mon...Je vais par exemple créer mon fichierpaïenne. On va le faire en live, ensemble.D'accord ?Je vais créerune copiede...
00:36:51 :Hop là !..................Donc, vous voyez, j'ai créé vraimentpour créer un tri supplémentaire,j'ai créé une fonction de 3 lignes.
00:37:11 :L'intérêt, surtout,alors là, ce n'est pas super évidentparce qu'on est sur un script unique,ça ne touche pas à la fonction principale.Ça, c'est important.
00:37:21 :Vous verrez ça,si un jour j'envoie ça,c'est dans les principes solides.D'accord ?Il faut que ce code soit modulaire,il ne faut pas que la modificationtouche l'origine.
00:37:35 :Et pour que les dossiers que je veux avoiren pipeline aillent dedans,j'ai simplement à rajoutermes décorateurs.Je le registre.Donc là, on a modifié notre code.
00:37:51 :Je vais vous repartagerl'écrande sortiedirectement.Donc, j'ai le nouveau codemodifié. Alors, j'essaie de vous afficherça un peu plus gros pour que ça soitplus visuelpour vous. Voilà, là, je pense qu'il faut
00:38:09 :faire beaucoup plus visuel.Donc, vous voyez, là, on a nos 5 dossiers.Je vais les supprimer.Ok.Alors,tac, tac, tac, tac, tac, tac.Je vais rejouer ma base.
00:38:25 :D'accord.Voilà.Ok.Et maintenant,et maintenant, je vaisréexécuter le code.Et on a bien notre dossierweb qui s'est créé ici.Etil nous a bien misnos fichiers web.
00:39:01 :Après, on va regarder dansOtherSphere si on veut se recréer un dossierrapidement.Ah ben tiens, on a les classeursXLX, là. Ça pourrait aller dans les documents, ça.
00:39:17 :On a du XLX, on a duPPTX. Qu'est-ce qu'on a d'autre ?Euh...Tac, tac, tac, tac.Tiens, on a du Pages aussi.Le Mac.
00:39:37 :Alors, on va prendre nos XLX, nos PPTXet puisnosnos Pages. Allez.Je remascule.Voyez un peu comment ça se passeau niveau du code.
00:39:51 :Hop, voilà.Donc, on a ditnos Pages, du XLXet du PPTX, on va les mettre dans les documents.Et ben alors,l'XLX,allez,le PPTXet, hop,le Pages.
00:40:21 :On recommence l'exécution.Tac.J'aurais une petite question.Vas-y, vas-y, pose la questionEn Python,on n'aime pas répéter les codes.Mais les codesCopyToDocument, CopyToImage,ils se ressemblent tous. Il n'y a pas moyen
00:40:47 :de faire que ça fasse qu'un seul code ?On pourrait.Alors, commenton pourrait faire ?Je vais couperla démonstration parce queon va plutôt se fixerlà-dessus, je ne vais pas pouvoirmontrer la démonstration.
00:41:05 :Euh...Alors là, le problème,c'est qu'on pourrait,techniquement, mais dans le cadre de ce qu'on a fait,ça ne va pas êtretrès intéressant.Pourquoi ?
00:41:19 :Parce que là,nos CopyToWeb, CopyToDocument,CopyToImage, CopyToVideo,ils permettent de déterminervers quel dossier ci, il faut le mettre.D'accord ?Donc sion créaitun fichier qui permetteune fonction uniquequi permette dedéterminer ça,on n'aurait plus l'intérêt de décorateur.
00:41:45 :Alors, je le concède queles CopyToDocument, CopyToImage,CopyToVideo, et ainsi de suite, ne sont pas trèsélégants en termes de codes.Maintenant, si je les avais faitcomme ça, c'était pour vous montrerjustement l'intérêt dudesign pattern registry et dudécorateur.
00:42:09 :Objectivement...Voilà.Objectivement,on ne va pas se mentir,la solution de Thibault est plus élégante.D'accord ?Maintenant, là, l'idée, c'étaitjustement, en partant d'un exercice commun,de vous montrer ce qu'on pouvait faire avec lesdécorateurs et certains designs patterns.
00:42:29 :Ce n'est pas la meilleure des solutionsen état.Le seul avantage qu'elle pourrait avoirpar rapport àla solution récréationnaire,c'est qu'elle est extrêmementsouple et évolutive.
00:42:43 :Et qu'elle évitebeaucoup les erreurs d'écriture, parce que vous voyez, quand jeveux rajouter une extension,j'ai juste besoin de rajouter l'extension.C'est le niveau souple, c'est maintenant ce que çafait gagner des...
00:42:57 :Le niveau gagne de temps,c'est parce que ça exécute moins de choses.Aussi.Donc voilà.Est-ce que ça vous a plu, tout ça ?Oui.
00:43:15 :Moi, j'ai un peu buggé sur le type.Le type.La syntaxe plus haute.Ici ?Oui. Alors ça,c'est unmodule, et ça te permetde créer un nouveautype de variable.
00:43:35 :D'accord ?En fait...La variablequi sera un dictionnaire string.Ok.Ça te permet de créer des types de variablesque tudéfinis toi-même.D'accord ?
00:43:53 :Par exemple, exporterscène, là, qu'on écrit comme uncollégode pour lequel on expliqueque les...Le type de...L'argument qu'il prend en paramètre.D'accord ?
00:44:09 :À la base,ça n'existe pas dans Python. Pouravoir un objet du type function,on fait un depth, register, selector,suffix, machin. Ok ?Là, en créant ça,ça nous permet de biaiser,de faire considérer la fonctionpresque,ce n'est pas exactement ce qui va se passer,comme une variable.
00:44:31 :Ok ?Et de pouvoir l'utiliser comme telleau sein des autres fonctions.Ou au sein d'un autre objet.Ok. Là, j'ai mieux compris.J'arrive à mieux lire.
00:44:43 :Ok................Est-ce qu'il y a d'autres questions ?N'hésitez pas...................Comme je vous avais dit,...
00:45:15 :Oui, mais rapidement,est-ce qu'il y a des exercices sur Doctrinerelatifsaudécorateur ? Est-ce que tu en connais ?Ou est-ce qu'il y a des chosespour s'entraîner là-dessus ?
00:45:29 :De mémoire, non.Sur Doctrine, il ne semble pas.Je n'ai pas sonnéun exercice.Après, je voudrais que moi les exercices sur Doctrine, je les ai faitsil y a un moment.
00:45:41 :Pour diversesraisons, je ne traîne plus tropsur Doctrine ces derniers temps.Je viens pour faire les mentorums, mais je n'ai pastrop le temps de parcourirle site.
00:45:53 :Je sais que Gab, en ce moment, est en train de fairebeaucoup, beaucoup de choses.Mais je ne crois pas qu'il y ait d'exercicesrelatifs au décorateurou à la création du décorateur.
00:46:03 :Je sais que dans Django, il y ades concepts.Alors,si vous me donnez deux secondes,je vais vous mettre un liendans la vidéo. Je vais vérifier
00:46:17 :d'abord que c'est toujours présent sur Doctrine.C'est pas ça que je veux.Tac.Tac.Tac.On va arrêter l'enregistrement pour ce soir.Je pense que pour les glaces, globalement, tout est bon.
00:46:45 :...Sur Doctrine, on va avoirbeaucoup d'appelsau décorateur dans la formationDjango, mais pas dansles exercices proprement.C'est plus dans leon fait appel au décorateuret pas on le fabrique commelà, il a été fabriqué.
00:47:15 :Je vais arrêter l'enregistrement.Oui, parce que Django, il existe déjà.Donc, tu l'appelles.Oui, c'est ça. On les appelleet on en fabriquedans les exercices qu'on a fabriqués directement.
00:47:29 :On dit que là, on a fabriqué et on manipuledes fichiers. Dans Django,c'est dans les modèles de données,la manière dont tu les réutilisespour éviter de recoder.
00:47:39 :En fait,on utilise les décorateursdéjà créés, mais on ne les recrée pas.De toute façon, les décorateurs sur Django,tu retournes à la source,tu vois comment ils sont écrits, mais bon.
00:48:01 :Oui, mais à aucun moment,tu as le concept defabriquer toi-mêmeet de le faire.C'est pour ça que j'ai buggéquand il y a eu le type.
00:48:13 :Et c'est vrai qu'il me semblequ'il y a une session où on expliquec'est quoi type,mais juste théorique.Pas pratique.En fait, on nous explique la fonction type.
00:48:27 :La fonction type pour tiper,pour savoir si c'est des...Oui, comme basculer.Mais je crois qu'à un moment donné,il parle de type pour justementdéfinir ta variablequi va fonctionner de telle façon.
00:48:41 :Mais pas forcément pour le pratiquer,juste pour t'expliquer le concept.Oui.Après ça, ça fait longtemps que je ne fais pasregarder toutes les sessions.
00:48:57 :Hop, ça y est.Je crois que j'ai retrouvé la sessionde...Alors, accrochez-vous.Je vais vous mettre le lien, c'est sur DocStream.Donc là,tournez ça dans le chat.
00:49:19 :Je laisse le temps de la récupérer.Est-ce que vous l'avez ?Oui.Donc c'est une sessionqui avait été faite par un ancien mentorThierry Chapuissur les décorateurs.
00:49:35 :Et justement, il réexpliquele système des décorateurs,comment on crée les décorateurs,et ainsi de suite.Objectivement, c'est presquedeux heures, maisc'est extrêmement bien détailléet extrêmement bien expliqué.
00:49:51 :Oui, Thierry, il est bon.Tu as eu l'occasion de suivreles mentorats de Thierry ?Il a une chaîne aussi à côté.C'est hyper poussé.
00:50:05 :Il explique très bien.Il faut s'accrocher un petit peu des fois quand même,mais c'est bien fait.Si vous voulez aller plus loin sur les décorateurs,je vous conseille d'aller revoir ce replay.
00:50:19 :Pour ceux qui veulent noter,c'est un replay du 21 septembre 2024.Même Thierry,là où il est bon aussi,c'est les mises en production.Il faut faire attentionsur les paramètresà ne pas publier,à une manière de le gérer.
00:50:37 :Il faut donner des mentorats dessuset c'est costaud.Voilà.Pour ceux qui veulent aller plus loinsur les décorateurs,je vous conseille d'aller regarder.Ça fait une heure cinquante, je crois,les mentorats.
00:50:55 :De quoi occuper une bonne soirée.Oui.Sans compterles retours en arrière qu'on fait parce qu'on n'a pas tout comprisce que Thierry était en train d'expliquer.
Aucune occurrence trouvée pour « ».