Templates Django, encodage Python et POO
Session du 14 janvier 2022 à 18h00
Pratique & Live Coding
Développement Web & Frameworks
Veille & Discussions
Qualité & Architecture
Programmation Orientée Objet (POO)
Deviens membre Premium
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- +100h de formations
- +180 exercices de code
- +100h de mentorats en rediffusion
- 20 projets
- Mentorats groupés hebdomadaires
- Support individuel avec nos mentors
Templates Django, encodage Python et POO
Présentation du langage de templating de Django avec les URLs
Discussion autour de l'encodage, ses problématiques sous Python 2 et ses avantages sous Python 3 (UTF-8...)
Correction / Refactoring d'un projet étudiant en Programmation Orientée Objet
00:00:00 :parfait alors je vais avertir tout le mondegénéralsalut Loïc, ça va? oui ça va bien et toi meilleur feu? de mêmesalut Loïc, salut alors j'ai fait l'appel à tous c'est bon en ce moment parfait alorsje sais pas si il va y avoir beaucoup de monde ce soir la dernière fois il y avait pas mal
00:00:43 :de monde quand même je vais vous partager ouais ok vous voyez je sais pas si vous voyezmon écran non j'ai pas partagé l'écran ok j'ai juste commencé ok Vincent sera paslà bon bah ça va peut-être ok Guillaume il y avait Yanis qui avait une question surl'encodage salut Guillaume! salut alors question live ouais c'est ça et je vais vous
00:01:22 :partager mon écran voilà normalement vous devriez voir mon écran ouais parfait et jevais partager le lien aussi je l'ai pas mis comment vous allez vous avez pu faire un peude pitons cette semaine? ouais ouais ouais t'as pu te remettre Loïc du coup? ouais
00:01:51 :ouais gentiment j'ai pris une bonne pause et puis là je me suis le dernier live onavait parlé du notre projet de faire le point et tout ça et puis tu nous avais parléde l'orienter objet du coup je me suis mis là dessus et puis t'as reçu mon message
00:02:07 :quoi. ouais c'est ça qu'on va voir effectivement c'est prévu hop t'es en dernier mais çaça devrait passer assez vite donc non mais ça va être bien j'ai regardé j'ai toncode là qui est ouvert et c'est bien parce que je pense que ça va être parfait pourmontrer justement l'intérêt de l'orienter objet et comment on peut aussi modifier un
00:02:33 :code existant et comment on peut aborder ses problématiques donc je pense que ça va êtresuper cool. ouais parfait. Alors hop bon je vais attendre encore une ou deux minutes et
00:02:46 :puis après on va commencer avec du coup ce que j'avais prévu ici. Je vais déjà commencerpar vous parler je l'avais déjà dit enfin je l'avais évoqué la dernière fois doncla semaine dernière, la formation e-commerce donc Django e-commerce qui maintenant estdonc disponible donc vous la retrouvez sur les projets, ça ressemble à une formation
00:03:10 :quand vous allez la suivre mais je l'ai mise c'est vraiment plus un projet guidé doncvous la retrouvez dans la page des projets dans apprendre projet ici et donc ça s'appellecréer un site e-commerce avec Django donc c'est la première partie qui est disponiblequi dure une dizaine d'heures, on est à 7 heures je crois et juste je regarde bon là
00:03:33 :il y a tout ce qui est, pas de nouvelles personnes non pas encore donc voilà il y a 7 heureslà en ce moment et ça va jusqu'à la création des tests unitaires donc en gros il y a presquenormalement toute la partie back-end qui est terminée alors après il y a bien sûr
00:03:52 :d'autres, enfin il y a toujours des choses qu'on peut rajouter je pourrais complexifierpas mal tout ce que j'ai fait jusqu'à présent mais il y a quand même tous les trucs critiquesje dirais c'est à dire que vous pouvez créer, enfin quelqu'un peut se créer un compte surle site, du côté admin on peut créer des éléments, des articles à afficher donc
00:04:13 :sur la boutique et les utilisateurs qui se créent un compte peuvent acheter ces articleset il y a même l'intégration de Stripe donc ça veut dire qu'on peut vraiment aller jusqu'àacheter l'article avec des vrais euros, avec une carte bancaire et il y a la gestion desadresses aussi par exemple donc là c'est dans l'idée d'avoir une boutique où il
00:04:34 :y a des éléments qui soient envoyés mais ça pourrait être aussi donc un peu commeje fais avec Dockstring des éléments digitaux on va dire mais bon voilà je trouvais çaintéressant de voir aussi tout le côté adresse de livraison, il y a les partiesaussi avec l'API de Stripe donc voir comment on peut utiliser une API pour récupérer
00:04:50 :des informations depuis Stripe et envoyer des informations à Stripe et jusqu'à lapartie test unitaire aussi qui est assez importante et après il y a toute la partie front quiva arriver que je suis en train de préparer qui arrivera dans les prochaines semaines,prochains mois donc on va arriver sur un gros projet qui devrait faire bien 12, 13
00:05:09 :voire 15 heures, il y a aussi toute la partie déploiement donc ça va continuer d'arrivermais voilà je voulais vous dire que c'est disponible pour tout le monde si Django vousintéresse. Des questions là dessus? Moi j'avais une question, ce matin j'ai fait
00:05:29 :un peu de Django et j'ai eu du mal sur une partie, les URL dynamiques, et c'est pourça que j'ai pas vraiment compris en fait, j'ai eu du mal, vraiment j'ai pas compris.
00:05:42 :Alors tu veux dire par dynamique tu veux dire par exemple le fait que ici l'URL elle estmodifiée en fonction de la formation dans ce cas-ci par exemple sur laquelle je suis? Non c'est pas ça, c'est quand par exemple imaginons que je clique sur un lien en fait,
00:06:00 :faire des liens cliquables, c'est à dire, est-ce que je peux partager mon écran? Ouitu peux normalement, il faut peut-être que j'arrête mon partage d'écran, voilà normalementtu devrais pouvoir partager le tien. C'est sur cette partie là. Ok. Ouais. J'ai vraiment
00:06:22 :fait mal, j'ai pas compris. Oui d'accord, oui alors je vois ce que tu veux dire. Doncen fait là c'est, ça c'est ce qu'on appelle, c'est le langage de template de Django, doncà chaque fois que t'as les accolades avec les pourcentages, c'est en fait quelque chosequi va être interprété par Django. Donc en fait ça veut dire que tout ce qui est
00:06:42 :entre les accolades, les pourcentages au début et à la fin ça va être remplacé par Django,et là ce que tu lui indiques en fait c'est le nom de l'URL, donc dans ce cas-ci le nomde l'URL c'est blogpost, et ça c'est le nom que tu as mis dans le fichier urls.py.
00:06:56 :Et le name. Ouais c'est ça, le name. Et donc lui en fait il va retrouver à partir du nom,il va remplacer toute cette partie qui est entre les accolades et les pourcentages, ilva remplacer ça par l'URL, la vraie URL en fait, qui est définie dans le fichier urls.py.
00:07:15 :Donc si tu vas voir dans, ah oui je croyais que t'étais, j'avais pas vu que t'étaissur docstring, je croyais que t'étais dans PyCharm. Non, je peux, je peux. Ouais si tu
00:07:25 :retournes un peu en avant dans la vidéo ou si tu l'as, je sais pas si tu l'as sur. J'aipas été sur mais j'ai deux écrans du coup ça va être, attends. Si tu l'as ouvert.
00:07:40 :Du coup, moi voilà, mon name c'est celui-là. Voilà, ouais. Et donc du coup il va remplacer,tu vois, il va utiliser le nom et il va le remplacer par ce qui est défini au tout débutdans ton fichier urls.py. Donc ici je suis, ouais. Donc ici je suis censé faire ça.
00:08:04 :Ouais c'est ça. Et là je mets, c'est déjà quoi, classe élève. Tu le mets entre, ouaisc'est ça, entre guillemets. Et après ça je suis, j'ai pas, en fait ce qui m'a surtout
00:08:21 :perturbé c'est le slug, j'ai pas vraiment compris ça, comment ça marche. En fait alorsça c'est ce que tu vas passer, attends je vais partager mon écran, hop, à mon tour.
00:08:33 :Hop, normalement c'est bon, vous devez voir mon écran. Donc en fait, hop, je vais allerici. Il faut voir ça vraiment comme, bah je vais le montrer sur docstring, ça va être
00:08:46 :plus simple. Par exemple docstring ici, on va aller sur url de formation, ça va êtremieux. Voilà donc en fait tu vois, à l'intérieur d'une url, donc t'as des parties qui vont
00:09:03 :pas bouger, par exemple quiz ici ça va pas bouger, et après ici tu vas effectivementavoir une partie qui va être dynamique, effectivement. Et en fait ça, donc là tu vois le nom de
00:09:14 :l'url, qui est quizstart, et si dans un fichier html je voulais renvoyer vers cette url ici,donc je mets hop comme ça, url, je vais le refermer tout de suite, hop, hop comme ça,donc je mets quizstart, et après faut voir ça presque comme une fonction python. En
00:09:35 :fait c'est que après le nom de l'url, tu vas lui passer le slug, et tu peux même lespécifier, tu peux mettre quizslug comme ça, et puis là le spécifier tu pourraisdire par exemple les fonctions. Et tu vois, c'est pour ça que je dis que ça ressemble
00:09:49 :à une fonction, parce que quand t'as une fonction python, si tu l'appelles, par exempleon ferait quizstart, et puis là on lui dirait quizslug égale les fonctions. Donc tu vois
00:10:02 :là c'est à peu près pareil, là t'as le nom de l'url, et ensuite tu vas lui passerdes informations, donc dans ce cas ci tu vas lui passer à quizslug une chaîne de caractère.
00:10:12 :Donc en fait ce qu'il va faire c'est qu'il va prendre cette chaîne de caractère etil va la mettre à la place de ça ici. Donc il va prendre les fonctions, il va le mettre
00:10:21 :ici, et là ton url ça va être quiz slash les fonctions, tout simplement. Et ça t'esmême pas obligé de le spécifier, là encore c'est comme les fonctions, tu pourrais justemettre directement le paramètre, l'envoyer comme ça, ça marcherait de la même façon.
00:10:34 :Mais du coup là pour l'exemple vu que c'est pas le même que ce qu'il y a en haut çapose pas de problème? C'est pas le même c'est à dire? Ça devrait être quizslug
00:10:48 :non? Ouais bah là c'est ça, quizslug, quizslug, faut pas confondre, tu vois t'asle nom de l'url qui est le nom qui est ici, et après t'as le nom des paramètres quisont dans ton url, et tu vois tu pourrais en avoir plusieurs, après on pourrait mettrepar exemple, si on avait un, bah en fait tu vois ici par exemple, j'ai même pas besoin
00:11:07 :de créer l'exemple parce qu'il existe plus bas, ici tu vois t'as le quizslug et aprèst'as la question. Et donc là si on voulait accéder à cette question, on ferait hop,
00:11:17 :comme ça, tac tac, on referme, donc là on aurait url, on aurait quiz-question, ensuiteon mettrait par exemple les fonctions, et ensuite on dirait je veux la question numéro2. Voilà encore on peut spécifier, on pourrait dire quizslug égal et question égal 2. Donc
00:11:39 :là je te dis c'est vraiment, faut voir ça comme une fonction, t'as le nom de la fonctionqui est en fait dans ce cas-ci le nom de l'url, et ensuite les paramètres et ce que t'envoiesaux paramètres. D'accord. Ok? Alors merci pour l'explication. Voilà, je crois qu'il
00:11:50 :y a quelqu'un, ouais, quelqu'un qui essaie de rentrer, voilà. Donc plusieurs personnesqui nous ont rejoints, Jean Bernard et Dominique si je ne me trompe pas. Donc bonsoir à vous.
00:12:03 :Alors, je reviens, donc formation Django, voilà, j'ai expliqué que le projet étaitdisponible. Bon j'avais une partie question que je pose du coup un peu comme toi Ricardo,
00:12:20 :là si jamais vous avez vu des choses pendant la semaine, si vous avez des questions, c'estle moment de les poser. Peut-être que finalement, après je sais pas, mieux que je le fasse
00:12:29 :à la fin, je sais pas, puisque là il y avait déjà Loïc qui m'avait partagé son projetqu'on allait voir et puis une question sur l'encodage aussi. Donc je vais peut-être,
00:12:38 :si ça vous va, on fera la partie questions à la fin, si jamais vous avez des questionsspécifiques à poser. Si ça vous va. Donc il y avait, alors Yacine je crois pas qu'il
00:12:53 :est là, non? Après on avait un peu répondu à sa question, je sais pas si vous l'avezvu passer ici dans le salon questions live. Ah oui Yacine est là, ah oui, ok je ne t'avais
00:13:10 :pas vue, c'est bon. Donc Yacine qui avait demandé en fait, alors il avait une questionsur l'encodage, alors c'est un truc avec Python 3, vous en avez peut-être pas du tout entenduparler, parce que c'est presque moi la plus, enfin la nouveauté que j'ai le plus appréciéeavec Python 3, c'était cette gestion de l'encodage, parce qu'avec Python 2 ça pose pas mal de
00:13:34 :problèmes, encore plus si vous êtes sur Windows, parce que notamment lorsque vouslisez, que vous écrivez des fichiers, c'est pas tout le temps fait en UTF-8, donc çapeut rajouter des problèmes, alors que sur MacOS et Linux, de base, le terminal et puisles fichiers aussi, ça peut dépendre des distributions et tout, mais c'est généralement
00:13:54 :en UTF-8, donc ça enlève un problème déjà sur Mac et Linux. Donc là Yacine en faitil avait une question par rapport à ça, donc faut savoir que vous allez rencontrerces problèmes beaucoup plus avec la version 2 de Python, avec la version 3 presque jamais,il y a Thierry si ça vous intéresse qui a posté un lien vers un webinar qui est assez
00:14:17 :intéressant, ça dure une dizaine de minutes, c'est vraiment pas très long, mais ça montrejustement des problèmes qu'on peut avoir avec Python 3 et avec du web scrapping dansce cas-ci, puisque avec du web scrapping il y a aussi, il montre dans Excel, donc pleinde petits détails comme ça sur des trucs très spécifiques, mais qui montrent que
00:14:33 :même avec Python 3 on peut avoir des fois des problèmes dans le codage. Donc moi personnellement,je fais très peu de web scrapping sur des trucs très très précis, et vraiment làça fait depuis que j'utilise Python 3, donc peut-être je sais pas, 3 ans maintenant,que j'ai plus jamais eu besoin de toucher à tout ce que je vais vous montrer ici, alors
00:14:54 :je vais pas faire un cours complet, l'encodage on pourrait y passer 3-4 heures à parlerdes tableaux ASCII, de comment ça fonctionne, des représentations en bytes etc, c'est intéressantje dirais plus en termes de culture générale, ça peut être intéressant justement si vousvoulez creuser pour des petits problèmes que vous pourriez avoir, mais je trouve pas
00:15:12 :que c'est utile de passer des heures là-dessus avant de rencontrer les problèmes en toutcas. Et après pour ça si vraiment vous avez des ressources là-dessus, j'en ai surtout
00:15:24 :en anglais, mais il y a notamment un tuto de RealPython qui est un truc très completlà-dessus, donc vous allez RealPython si vous connaissez pas c'est une bonne ressource,et ils ont, si je tape en coding, voilà. Donc ils ont un gros tuto complexe, je me
00:15:43 :suis pas encore lu il y a un petit moment, qui est bien foutu, bon en anglais mais çaexplique quand même pas mal de choses. Donc l'encodage, le problème que Yassine avait
00:15:57 :c'était que ça donne des trucs, si vous voyez ici, ça peut donner des trucs commeça, donc généralement quand on a des accents, là vous voyez le jeu du nombre mystère,le E accent grave, ça nous affiche un truc bizarre comme ça, donc ça c'est typiquementun problème d'encodage. Vous allez aussi avoir une erreur, je vais aller sur Windows,
00:16:17 :je sais pas si vous voyez bien mon Windows là, je suis sur un, je sais pas si ça partagebien avec l'écran, vous êtes toujours là? Ah je vous entends plus, si? Ok vous voyez
00:16:38 :bien Windows parfait. Alors il y a plusieurs problèmes que vous allez pouvoir rencontrer,donc là vous voyez je suis sur un Windows avec Python 2.7, et la première chose que
00:16:51 :vous allez rencontrer c'est si vous mettez, tout simplement, donc là c'est un scriptde test, mais un script que je vais lancer avec Python 2.7, et vous voyez ici que j'ai
00:17:00 :un accent, donc là il est directement dans la chaîne de caractère, ça pourrait êtrele cas aussi si vous essayez, alors là je vous déconseille de le faire, même avecPython 3, de faire des variables avec des accents, ça c'est vraiment à prohiber,mais en fait peu importe où se trouve l'accent dans votre fichier, si je fais juste ça,
00:17:17 :que je sauvegarde le fichier et que je l'exécute, vous allez avoir un problème, donc c'estun problème, une erreur de syntaxe en fait, où il dit qu'il y a un non ASCII caractère.
00:17:27 :Donc ASCII c'est tout simplement une table assez petite qui contient majoritairementles caractères anglais, donc toutes les lettres de l'alphabet, mais qui contient du couppas les accents, pas les CCDI, donc tous ces trucs là. Donc dès que vous allez mettre
00:17:39 :un caractère spécial comme un accent, un CCDI, donc ces trucs qu'on a généralementen français, vous voyez que là il me laisse même pas exécuter le script, j'ai directementune erreur, une erreur de syntaxe, puisqu'il me dit qu'il y a un caractère dans mon scriptqui n'est pas reconnu, qui n'est pas dans la table ASCII. Donc là ce que vous pouvez
00:17:56 :faire c'est au-dessus, mettre un commentaire, alors il faut que ce soit au tout début devotre script, et vous allez spécifier l'encoding. Donc pour ça vous allez dire coding 2.utf-8,
00:18:07 :alors vous allez voir différentes syntaxes, Yassine dans ce que t'avais posté il y aaussi ça qu'on retrouve très souvent, avec les étoiles tirées, alors il faut savoirqu'en fait c'est une expression régulière qui va regarder ça, donc vous avez quandmême pas mal de libertés, et ils en parlent justement dans RealPython, je crois qu'on
00:18:25 :peut mettre encoding, les espaces c'est pas très grave, on pourrait mettre un espaceici, on pourrait mettre utf-8 comme ça, c'est assez libre, moi je m'étais habituéà mettre comme ça tout simplement, coding 2.utf-8, c'est cette façon de faire que
00:18:39 :j'ai retenue. Donc juste le fait de faire ça en fait ça va permettre déjà de nepas avoir cette erreur. Donc là si je sauvegarde et que je relance le script, vous voyez que
00:18:47 :là on a plus d'erreur, et on se retrouve par contre avec le caractère qui n'est pascorrectement affiché. Donc là on est dans le problème d'encodage, puisqu'on dit en
00:18:56 :fait avec cette ligne qu'on va avoir à l'intérieur du script ici des caractères qui vont êtreen dehors du tableau ASCII, donc là le fait de spécifier qu'on est avec un autre tableauqui est le tableau utf-8 qui contient beaucoup beaucoup beaucoup plus de caractères, doncpar exemple tous les caractères des langues arabes, du chinois, donc toutes ces langues
00:19:17 :avec des symboles qu'on a pas généralement, ou même le français comme je vous le disaisavec des accents, des ccd, etc. Et bien tout ça on va pouvoir le mettre dans notre script.
00:19:25 :Après on a encore un problème d'affichage, parce que là notre chaîne de caractèrepar défaut, en fait elle va pas être en utf-8. Donc là on se retrouve avec un problème,
00:19:34 :et c'est ça qui a été modifié avec Python 3, c'est que maintenant de base avec Python3 les chaînes de caractères elles sont avec cet encoding utf-8, et donc ça fait qu'onpeut utiliser, je pourrais mettre des trucs, justement je pourrais mettre des symboleschinois ici et ça serait affiché correctement. C'est aussi ça qui fait qu'on peut mettre
00:19:52 :des smileys, si ici à l'intérieur je mets un emoji, et bien il va être correctementaffiché. Donc là le problème qu'on a c'est que ça c'est pas bien affiché, alors il
00:20:03 :y a deux choses que vous pouvez faire, c'est un peu comme avec les problèmes des cheminsde fichiers avec Windows, en fait là si on est directement à la chaîne de caractèreson peut mettre devant la lettre U, si vous avez suivi les formations de base sur docstring,vous savez que pour les chemins de fichiers par exemple on peut mettre la lettre R, et
00:20:24 :ça signifie qu'on veut avoir un raw string, donc on ne veut pas interpréter ce qui està l'intérieur, donc ça c'est par exemple si on a des slash n, donc si on a un slashn comme ceci, il ne sera pas interprété comme un retour à la ligne. Donc ça c'est
00:20:40 :les raw strings, les chaînes de caractères brutes, et on peut mettre, il y a plein depetites lettres qu'on peut mettre comme ça devant la chaîne de caractères, et si onmet un U, et bien on indique en fait que cette chaîne de caractères elle va être du type
00:20:53 :unicode. Et donc si je sauvegarde, et que je relance, là cette fois-ci vous voyez c'estbien affiché. Et ce qu'on peut faire aussi c'est utiliser une méthode qui est la méthode
00:21:03 :decode, donc decode comme ceci, et lui spécifier dans quelle table justement on veut décodercette chaîne de caractères, donc dans ce cas-ci on va dire de la décoder en UTF-8,et là vous allez voir que ça marche de la même façon. Donc dans quel cas de figure
00:21:17 :on utilise l'un ou l'autre, comme je vous disais si vraiment vous avez la chaîne decaractères que vous mettez vous-même dans votre script, là vous pouvez mettre le Udirectement devant la chaîne de caractères. Si par contre on avait un input, comme ceci,
00:21:32 :là en fait on ne pourrait pas mettre directement le U devant, c'est logique. Donc si on avaitun input, alors avec Picon2 c'est raw input, petite subtilité aussi, ça a changé, donclà on dirait par exemple entrer un mot, là après on pourrait faire.decode UTF-8.
00:21:48 :Là du coup on ne peut pas mettre le U devant, on ne peut pas mettre le U devant les guillemets,et ça ne servira à rien de le mettre ici non plus, puisque ici ce serait vraiment juste,ce serait par exemple si on voulait mettre mystère directement, là si on mettait un
00:22:06 :accent ici, là effectivement il faudrait mettre le U devant, de la même façon, parceque là on indique que c'est cette chaîne de caractères qui va avoir un truc un peuspécial. Donc là en fait on peut dire voilà juste entrer un mot, je sauvegarde, decode
00:22:18 :UTF-8, je lance, là je vais dire donc entrer un mot, mystère, comme ceci, et can decode,tiens UTF-8, j'ai bien mis decode, alors vous voyez ça commence les problèmes, décodeUTF-8, décode UTF-8, décode UTF-8, decode UTF-8, décode UTF-8, décode UTF-8, décodeUTF-8. Alors est-ce que c'est parce que j'ai mis, je ne sais jamais, il ne faut peut-être
00:22:43 :pas mettre. Je vais revenir avec raw input, parce qu'avec Python 2 il y a raw input etinput, et il y en a un qui va en fait interpréter votre chaîne de caractères et l'autre non.
00:22:55 :Et ça aussi ça peut poser des problèmes. Alors si je fais ça, non, et si je fais ça,plus, il ne veut pas. Alors oui alors là c'est le problème, il faut mettre l'anime,
00:23:20 :non il veut pas. Alors après, pourtant il marchait tout à l'heure avec juste le mystère,donc là je sais pas, ça doit être encore un truc, vous voyez que des problèmes avecces trucs de décoding, et là c'est une erreur de unicodecoder. Ça c'est l'autre erreur
00:23:38 :que je voulais vous montrer, qui est l'erreur que vous allez avoir quand il n'arrive pasà décoder un caractère, donc là le E accent grave, il n'arrive pas à le décoder. Donc
00:23:51 :pourquoi je sais pas. Après sur Windows, c'est ce qu'avait montré Thierry dans saréponse, vous avez aussi le 6.stdin.encoding je crois, donc ça en fait c'est selon les
00:24:03 :systèmes d'exploitation, c'est pas forcément tout le temps utf-8 qui va être utilisé,et si je fais un print de ça, vous allez voir, ça va m'indiquer en fait l'encodingde base du système d'exploitation qui est utilisé, et c'est pas tout le temps utf-8qui est utilisé. Là vous voyez c'est cp850, donc ce que vous pouvez faire aussi c'est
00:24:22 :vous passez directement ça, comme ça, donc ça c'est la façon la plus appropriée defaire en fonction de votre système d'exploitation pour qu'il utilise l'encoding de base dusystème d'exploitation qui va être utilisé pour la lecture des fichiers ou des trucsdu genre. Donc là si je réessaye comme ça, voilà. Donc là vous voyez ça marche, donc
00:24:43 :ça doit être parce que ça doit être Windows qui arrive pas à comprendre le utf-8 dansle terminal quand on utilise le decode. En tout cas, vous voyez que ça peut poser pas
00:24:54 :mal de problèmes, le mieux, quand vous avez des inputs c'est un petit peu plus embêtant,sinon y'a SYN comme t'as vu, donc il suffit de rajouter le U devant les chaînes de caractèreet normalement ça règle les problèmes, pas oublier de mettre le coding utf-8 au débutbien sûr, sinon de base ça fonctionnera pas, et donc ce 6, stdin, encoding, si tu veux
00:25:15 :vraiment utiliser ce qui est défini par ton système d'exploitation. Sur Mac et Linuxje sais que de base c'est utf-8, donc souvent en fait les gens vont mettre utf-8 directement,parce que de base c'est ça qui est utilisé, sur Windows ça peut dépendre j'imagine,des versions, parce que c'est ça, je crois qu'il y a Windows Server par exemple, ils
00:25:34 :utilisent un autre encoding, donc ça va dépendre des systèmes d'exploitation après. Est-cequ'il y a des questions un peu là dessus? ça va? Juste une petite question rapide
00:25:47 :et utile, si j'ai bien compris, là c'est 30 heures, moi j'ai jamais croisé ça autravail, mais au final parce qu'on utilise mon anglais, parce qu'il n'y a pas de caractèrespécial, et donc là avec la méthode de TI, si on ajoute un U devant la chaîne de caractère
00:26:10 :ça marche pire, et à chaque fois qu'on déclare une chaîne de caractère, il fautla préciser par un U, soit par un truc qui le fait automatiquement partout, genre onle fait au tout début, il va comprendre directement que toutes les chaînes de caractère, ilfaut les remplacer par un encoding automatique. En fait le truc c'est que si tu veux avec
00:26:43 :Python 3, je ne suis pas sûr à 100% de ce que je dis, je sais qu'avec Python 3 en faitils ont fait un truc, parce que forcément le Unicode, vu qu'il y a beaucoup plus decaractères, c'est beaucoup plus lourd, et en fait ils ont un truc qui est optimisé,
00:26:57 :c'est à dire que si tu as des chaînes de caractères qui n'ont pas de caractère spécial,ils vont utiliser la totalité du tableau pour pas que ça prenne trop de place en mémoire.
00:27:08 :Donc ça c'est des trucs qui sont faits au niveau de ces Pythons, vous n'avez pas besoinde vous en soucier, mais du coup c'est des trucs qui sont faits pour optimiser la mémoire.
00:27:15 :Et je pense que dans Python 2 en fait, si tu mets Unicode, donc le U devant des chaînesde caractères, je pense pas que tu aies cette optimisation qui est faite, et du coup çava effectivement surcharger ton code, et le truc c'est qu'en fait il faut pas le mettre
00:27:28 :partout, dans le sens où si tu fais une chaîne de caractères comme ça, qui est Mysterypar exemple, bah là t'as pas de raison de mettre le U devant, parce que t'as pas decaractères spéciaux. Donc c'est vraiment juste si tu sais que t'as un caractère spécial
00:27:39 :dans une chaîne de caractères, bah là tu mets un U devant, et donc ce qu'il faut savoirc'est que, à revérifier, mais je crois que du coup y a pas ces trucs d'optimisation,et du coup ta chaîne de caractères va prendre plus de place en mémoire à cause de ça.
00:27:52 :Donc ne pas le mettre partout, mais c'est ça aussi qui est intéressant, c'est d'avoircette granularité, parce que si tu mettais quelque chose qui disait, bah toutes les chaînesde caractères dans le script elles vont être de type Unicode, avec Python 2, comme y apas ces optimisations là, ça prendrait beaucoup plus de mémoire que ça ne devrait pouvoir
00:28:11 :en prendre.Est-ce qu'il y avait d'autres questions sur un encoding? Comme je vous dis, faut pasvous en faire, là j'étais à rentrer un peu dans le technique et tout, là j'ai essayéde faire un petit aperçu des erreurs que vous pourriez rencontrer, comment les contourner,mais c'est ouais, ça se peut que vous tombiez jamais dessus de votre vie, donc faut pas
00:28:32 :vous en faire. Pas de questions là-dessus?Alors, ce qu'on va faire, c'est qu'on va continuer, je regarde s'il n'y a pas de nouvellesquestions là non plus, ok parfait. Donc on va regarder, je ne suis pas sûr que tout
00:28:51 :le monde ici avait vu ce qu'avait fait Loic, Loic avait commencé un projet avec Martinil y a maintenant presque un mois je pense, c'était avant les fêtes de Noël, et c'étaitun projet, je sais pas si tu veux expliquer rapidement Loic?
00:29:10 :C'est simplement le début d'un ERP qui se complexifiera dans l'avenir, c'est justela gestion, jusqu'à maintenant je travaillais dans l'horlogerie, et puis les ouvriers remplissentune feuille pour la maintenance des outils, et puis la livraison des pièces, des vis,tout ce qu'ils fabriquent, les balanciers etc, tout ce qui concerne les montres, les
00:29:38 :pièces d'horlogerie, et donc il y a une feuille que je lui ai envoyée à Thibault,qui explique à peu près à quoi ça ressemble, et on a décidé d'informatiser ça, doncc'est juste, ça commence par un petit projet quoi.
00:29:56 :Ouais et le truc c'est que du coup tu l'avais commencé avec Martin, avec vos connaissancesà l'époque qui étaient surtout sur ce qu'était fonction, vous commenciez à voirl'orienté objet en fait.
00:30:06 :Exactement ouais.Mais comme vous étiez en fait encore au début de l'orienté objet, nous on vous avaitconseillé de le faire avec des fonctions, donc là c'est le script que tu as actuellement,et donc la question que Loic avait c'était, bah déjà, comment on passait de l'orientéobjet et quel est l'intérêt aussi de passer à de l'orienté objet, parce que ce que
00:30:22 :tu me disais Loic c'est que tu voyais pas forcément l'intérêt de passer à de l'orientéobjet pour ce script.Bah alors, de ce que j'ai vu des cours là qu'il y a sur le site, au final j'avaisl'impression d'une redondance quoi, en me disant bah en fait dans ma classe par exemple
00:30:39 :le outil, bah je réintègre les fonctions que j'ai déjà intégrées dans des fichiersque j'ai actuellement.J'ai l'impression de refaire la même chose finalement.Oui alors, là c'est sûr que, alors si c'est ça ta question, c'est sûr que là quandtu passes, quand tu fais du refactoring, donc ce qu'on appelle du refactoring comme ça
00:30:56 :en bon français, refactoring, c'est sûr que là en fait tu vas, c'est presque quedu copier-coller dans le sens où tu vas créer une classe et puis après les fonctionnalitésque tu as déjà codées, il y a plein de choses que tu vas probablement pouvoir réutiliseret que tu vas juste déplacer à l'intérieur de ta classe.
00:31:13 :D'accord, donc c'est pas moi qui fais une erreur?Non non, c'est normal que tu aies déjà des parties du code qui ne bougent pas et c'estpas parce que tu fais de l'orienté objet que d'un coup il va falloir tout réécrire.
00:31:25 :La logique du code de je te demande quel est le nom de la pièce, combien il y en a etpuis à quelle date elle a été installée, bah ça c'est des trucs que tu vois, le input,récupérer ça, c'est des trucs que ça va pas changer, que tu sois avec des fonctions
00:31:41 :en orienté objet, ça changera pas.C'est juste la façon dont après tu vas utiliser ton script qui va être un peu différente.D'accord.Pour ça, alors moi j'ai un exemple que j'aime beaucoup qui est en fait dans ma vied'avant, comme je dis souvent, dans la 3D en fait, il y a un logiciel qui avait deux
00:32:05 :librairies, une qui est la librairie de base en fait, donc un logiciel de 3D, la librairiede base qui n'était pas en orienté objet et une autre librairie, Pimel, qui étaiten orienté objet.
00:32:17 :Et je trouve que, donc au delà du fait que c'est de la 3D etc, vous avez pas besoinde comprendre tout ça, voilà, je trouve que cet exemple est le plus parlant, c'estla différence entre la façon procédurale, qui n'est pas en orienté objet, et la façonorientée objet.
00:32:32 :Donc le but ici en fait de ces lignes de code pour faire rapidement c'est de récupérerla position d'une caméra dans la scène 3D.Et donc la façon de faire qui n'est pas orientée objet, vous voyez qu'à chaque fois en faiton passe par des fonctions.
00:32:47 :On passe par une fonction LS, la fonction liste, où on lui dit récupère moi toutesles caméras dans la scène, donc ça, ça va retourner une liste, nous ensuite on veutrécupérer la première caméra de la liste, donc on utilise le crochet 0, et donc toutça, ça va nous retourner une chaîne de caractère.
00:33:02 :Donc on va avoir par exemple caméra principale, donc une chaîne de caractère caméra principale.Ensuite on veut récupérer le parent de cette caméra, donc là on utilise une autre fonctionqui va nous dire liste moi les relatives, donc les choses qui sont autour de cette caméra,et on lui donne le nom de la caméra, donc tout ça, et on lui dit qu'on veut le parent.
00:33:22 :Donc tout ça, ça va nous retourner une liste, et là de la même façon, donc ça, ça vanous retourner par exemple parent de la caméra dans une liste, et on veut récupérer le0.
00:33:30 :Donc là hop, on prend tout ça, ça, ça va nous retourner une chaîne de caractère,on ajoute à ça le point translate, et on repasse tout ça à une fonction getAttributepour récupérer les attributs.
00:33:41 :Donc vous voyez en fait qu'on passe, on part vraiment en fait, ça fait un peu un trucen poupée russe, et c'est pas très, ça se lit pas de gauche à droite si vous voulez,parce que là en fait le tout début de notre script il est au milieu.
00:33:55 :On récupère la caméra, ensuite on récupère le parent, et ensuite on récupère l'attributde tout ça.Et en orienté objet, en fait, on va commencer par récupérer la caméra, donc là on partvraiment de toute la gauche, et ça, ça va nous retourner un objet.
00:34:10 :Et cet objet, donc c'est plus une chaîne de caractère, c'est vraiment un objet caméraqui va avoir des méthodes, des attributs, etc.Et cet objet caméra, il a une méthode getParent qui va nous retourner le parent, et sur ceparent on veut récupérer le translate, et sur la translation, la position, on veut
00:34:26 :récupérer juste la coordonnée en z.Et là aussi vous voyez que sans orienté objet, quand on est avec juste des structuresde base de Python, vous voyez à chaque fois on veut récupérer le premier élément,on veut récupérer la coordonnée en z, vous voyez qu'on est obligé de dire crochet 2,
00:34:43 :parce qu'on va avoir une liste avec la coordonnée en x, y et z, et donc en z c'est la coordonnéequi est en troisième position dans la liste.
00:34:51 :Mais pour quelqu'un qui lit le code, si il sait pas ça, c'est vraiment pas clair.Alors qu'avec de l'orienté objet, vous pouvez faire un attribut qui va aller chercherce troisième élément dans votre liste à l'intérieur de la classe, mais que vousallez appeler tout simplement z.
00:35:03 :Donc là encore c'est beaucoup plus simple, c'est beaucoup plus clair, que là on varécupérer le parent, ensuite le translate, et ensuite la position en z.
00:35:10 :Et on a vraiment une lecture qui va de gauche à droite, avec à chaque fois une méthodeet des attributs qui sont liés les uns aux autres.
00:35:17 :Plutôt qu'à chaque fois de repasser tout ça à une fonction et de travailler avecdes types natifs.Ça va pour ça? C'était clair?Ouais, on va dire que oui.
00:35:27 :Après il faut vraiment le mettre en pratique, parce que là il y a beaucoup de codes quevous comprenez pas forcément avec tous ces trucs là.
00:35:35 :Mais retenez juste que vous voyez avec ça en fait on a vraiment ce truc de poupée russequi est un peu dur à lire, alors que là on a vraiment une lecture de gauche à droitequi est beaucoup plus facile à lire.
00:35:45 :Et je trouve en fait, et donc si je reviens dans ton script, tu vois je trouve qu'onvoit en fait très bien ça ici.Là tu vois tu as travaillé avec des dictionnaires, donc c'est bien parce que c'est ce que tuconnaissais jusqu'à présent et il y a plein de cas de figure dans lesquels travailler
00:36:01 :avec des dictionnaires ou des listes c'est suffisant.Sauf que là tu vois à chaque fois donc t'es obligé de passer par des crochets comme ça.
00:36:08 :Et le dictionnaire est quand même mieux que la liste, parce que la liste t'es d'accordque si à la place de périodicité ici t'avais crochet 1, parce que toi tu savais que lapériodicité elle était en deuxième dans la liste, pour quelqu'un qui lit ton scriptc'est pas du tout clair que c'est la périodicité que tu vas récupérer.
00:36:25 :Alors qu'avec un dictionnaire au moins on a un nom, donc c'est déjà plus facileà comprendre de quoi on parle.Mais ça reste quand même tu vois de la chaîne de caractère, ça reste des typesde données qui sont assez limités finalement, alors qu'avec de l'orienté objet tu peux
00:36:39 :aller beaucoup beaucoup plus loin.Donc est-ce que ça va jusque là, est-ce qu'il y avait des questions?Je continue, ça va?Tu peux continuer.Donc après tu vois ici, toi pour l'instant effectivement tu as changé outil, tu as affichéoutil, supprimé outil, donc tout ça ça ressemble grandement à des méthodes que
00:37:00 :tu vas mettre à l'intérieur de ta classe.Donc effectivement tout ça ça va probablement juste se pousser d'une indentation si tu veux.Après il faut quand même analyser, moi dans ce que j'ai vu de ton code j'ai l'impressionqu'il y a deux choses en fait, c'est que tu as l'outil en tant que tel, qui est un objet
00:37:17 :à part entière, et après tu as un gestionnaire d'outils.Donc un gestionnaire d'outils qui va par exemple ajouter les outils dans une livraison,parce que je crois qu'après tu as une partie livraison, tu as affiché ou supprimé, donclà supprimé j'imagine, voilà c'est ça tu as un fichier ici, donc en fait tu vas
00:37:38 :ajouter des outils dans un fichier.Donc tu vois déjà moi là je vois deux choses, et ça ça va rentrer aussi dans lesconcepts de programmation, c'est à dire qu'on va essayer de faire des choses, des classes,des objets qui ne font qu'une chose, et c'est pareil pour les fonctions, quand on fait une
00:37:55 :fonction on essaie de s'assurer qu'elle ne fasse pas 40 choses différentes, et donclà c'est un peu la même logique, on va essayer d'avoir une classe qui ne représente pasà la fois l'outil et l'assemblage de plein d'outils, parce que ça commencerait à mélangerplusieurs choses différentes, et si tu dois modifier juste l'outil ou modifier juste
00:38:16 :l'assemblage, ça veut dire que tout est au même endroit et ça peut poser des problèmes.Donc la première chose que je vois ici c'est clairement tu vois tu as un outil, un outilavec des attributs, donc là c'est clairement la date, la position, la périodicité, etdonc moi là dedans tu vois je me dis on va faire une classe outils, donc tu vas faire
00:38:37 :une classe outils comme ça, et cette classe elle va avoir des attributs, donc là on vafaire le init, et on va lui passer des attributs, donc par exemple date, position et périodicité.
00:38:52 :Alors je ne suis pas sûr de position et périodicité à quoi ça correspond exactement, si c'estla position de l'outil à l'intérieur de la liste ou... Enfin il faut qu'on s'en rende
00:39:03 :compte qu'en fait dans une machine tu peux avoir plusieurs outils que tu vises contreune plaque si tu veux de métal, et pour identifier où est l'outil dans la machine, on lui donnesimplement une position. Et ça va être par exemple 1, 2, 3, 4? Ça va être T01, voilà
00:39:18 :ça va de T01 à T07. Ok d'accord, donc là dans ce cas-ci ça va être une chaîne decaractère, donc on va dire, et l'outil il a un nom j'imagine? Oui, c'est une référence.
00:39:29 :Référence, voilà, quelle est la référence? Ok, donc voilà, tu vois là on a la référence,la date, la position et la périodicité, donc tout ça c'est des attributs tu vois,donc on va dire, on pourrait dire par exemple tout simplement name, pour l'instant je vaismettre une chaîne de caractère vide, on va dire date, on va dire périodicité et position,
00:39:51 :c'est ça, self.position, et ça je vais mettre aussi ça. Donc là tu vois on commence justeà définir des attributs, et ça forcément ces attributs on va pas les coder en dur puisqueça va être différent à chaque fois. D'accord. Donc là on va mettre des éléments ici,
00:40:07 :donc date, position et périodicité. Donc là après on rentre vraiment dans l'orientéobjet, donc soit vous avez vu les cours d'orienté objet et ça va être très clair pour vous,soit ça va être moyennement clair, soit vous allez être complètement perdu. Mais
00:40:24 :je vais essayer de pas être trop long et de pas non plus aller trop rapidement. Onva faire des exemples et comme ça vous allez voir. Alors là, ouais, je vais juste commenter
00:40:35 :ça pour pas que ça s'exécute. Voilà, et là t'as plus les outils du coup, ok on vajuste foutre ça ici, comme ça on en a pas les erreurs. Donc là en fait ce qu'on peut
00:40:47 :faire avec ça, juste avec cette base ici, ça veut dire qu'on peut créer tout simplementune instance de ton outil. Donc on pourra dire par exemple outil01 égale outil, name
00:40:56 :on va dire que c'est par exemple RF, je sais pas, voilà on va donner une référence,date on pourrait dire, on pourrait dire, là on est combien, 14, 01, 2022, on pourraitdonner un objet de type date mais je vais passer vite là dessus, et position on vadire, t, 0, et périodicité, périodicité je sais pas ce que c'est mais on va mettre
00:41:21 :une chaîne de caractère vide pour l'instant, ça pourrait être n'importe quoi. Et donclà tu vois, l'intérêt déjà c'est que ici juste avec ça, du coup si je veux accéderau nom de l'outil je fais outil.name, ou outil.date. Donc déjà là tu vois on a quelque chose
00:41:36 :qui est un peu plus simple que ce que t'avais ici. Là il fallait que tu ailles récupérerle nom de l'outil et ensuite la date. Donc là en fait tout ça ici si tu veux c'est
00:41:45 :ton instance. Là avant toi t'avais une, donc outil c'était un dictionnaire, donct'avais un dictionnaire avec le nom de l'outil en clé et après il fallait que t'aillesrécupérer la date, donc là tu vois t'as une imbrication et donc si on affiche le dictionnaireça commence à faire des trucs imbriqués, ça va parce que là t'as juste deux niveaux
00:42:03 :mais tu vois plus tu vas vouloir préciser des choses plus ça va devenir compliquéà gérer. Excuse moi je te coupe, là ce que t'étais en train de montrer c'est simplement
00:42:12 :que je le déclarais une fois, ça me créait le dictionnaire et les listes à l'intérieurdu dictionnaire. De quoi, ce que je fais là ou? Non non au dessus, ce que tu montres
00:42:21 :là. Ah oui c'est ça. Ça c'était juste lorsque tu démarres le programme, par exemplemoi je t'ai envoyé le fichier ça va te créer le JSON. Mais après si tu veux avoir dans
00:42:31 :le, je crois que c'est aussi dans l'outillage, afficher outil, je fais pas la même choseje crois. Oui tu fais juste afficher, oui d'accord. Parce que là où je te dis à mon
00:42:44 :avis tu vois, moi je ferais un gestionnaire d'outils en fait, donc j'aurai les outilsici et après je ferai un par exemple gestionnaire outils et là en fait tu vois je suis mêmepas sûr, on aurait même pas besoin de faire un unit parce que ton gestionnaire à la limite
00:42:59 :t'en aura qu'un et par exemple tu pourrais faire un truc, on pourrait faire un get, jefais un peu du franglais, vous me pardonnez, gestionnaire outils get tools et là en faittu ferais ton open, ou tu irais récupérer le JSON si tu veux. Ouais. Donc là tu, on
00:43:19 :pourrait même en fait le faire hériter d'une liste par exemple, donc on pourrait faireune liste comme ceci, et là en fait ce qu'on pourrait faire c'est carrément, ouais alorsje veux pas aller trop dans le complexe mais tu vois on pourrait faire, si tu sauvegardestout ça finalement dans un fichier JSON. Ouais. Ok. Donc là on pourrait aller chercher
00:43:41 :outils.json en read, et ensuite ce qu'on pourrait faire ici, tu vois c'est, alorsje vais le mettre plus bas, comme ça ça sera plus clair, on a les outils au dessus.
00:43:54 :Donc là t'as tes outils et là tu pourrais dire, imaginons que ce soit juste une liste,ouais, on pourrait dire donc content on va faire un f.read, et read.splitlines, donc
00:44:09 :là t'aurais en fait une liste avec on va dire, je vais mettre un commentaire, donccontent ça serait égal à rf001, alors ouais ce serait peut-être plutôt, ouaisce serait un dictionnaire parce que t'aurais tous les attributs, donc effectivement ceserait ton dictionnaire en fait, avec rf01 et puis après un autre dictionnaire avec
00:44:34 :date et 14.01.2022. T'aurais un truc comme ça par exemple. Et donc après ce que tupeux faire c'est créer en fait des instances de l'outil. Tu vas dire bah hop on va faire
00:44:51 :pour each tool in content, et là tu vas faire un outil qui va être égal à outil, ettu vas lui passer donc dans name, tu vas lui passer le each tool, hop, et puis tu vas luipasser par exemple le nom, etc. Donc je vais pas rentrer trop dans le détail, on pourra
00:45:10 :revoir ça si tu veux Loïc, après dans l'implémentation là c'est un peu du pseudo code pour essayerde vous montrer à quoi ça pourrait ressembler, et puis après forcément faudra le fairede façon un peu plus, enfin un peu plus cohérente avec toi ce que t'avais. Mais donc tu vois
00:45:27 :en gros tu vas récupérer avec ton gestionnaire, tu vas récupérer les outils que t'as sauvegardésdans ton JSON, dans une base de données, et après en fait tu récupères des instancesde tes outils. Et après comme ça, ça te permettrait juste de dire par exemple, tu
00:45:39 :pourrais faire gestionnaire outils, donc tu fais une instance de ton gestionnaire, etlà tu pourrais dire gestionnaire outils.get, et là tu pourrais dire bah moi je veux l'outil
00:45:49 :rf001 par exemple. D'accord. Et là tu pourrais le récupérer, et puis après tu pourraisfaire print outils.date, print outils.périodicité, et puis après tu pourrais dire outils.change
00:46:02 :date, et là tu lui dirais bah maintenant c'est le 15.01.2022. Ok. Tu vois, et aprèstu pourrais dire gestionnaire outils.save et puis tu lui passes ton outil. Ok. Donc
00:46:18 :tu vois là, tu vois ce que t'as fait, c'est ce que je disais, tu vois le save ça seraitpar exemple le, peut-être change outil tu vois, voilà. Tu pourras voir, ou alors ce
00:46:30 :serait directement sur l'instance, tu vois, il y a différentes façons de voir le truc,tu pourras dire, bah j'ai l'impression qu'en fait le changer outil en fait ce serait directementsur l'outil tu vois. Donc c'est-à-dire que tu vas dire outils.change date, tu ferais
00:46:45 :ça, et là après en fait quand tu fais ça dans ton script ça te ferait un input ente disant quelle est la nouvelle date, tu l'entres et puis hop ça change ton instance. Ouais.
00:46:53 :Tu vois. Mais je serais quand même obligé de passer par la fonction création de dictionnaireliste là, ça je peux pas m'en séparer, celui-là. Celle-là là? Ouais. Bah tu vas
00:47:05 :la faire différemment en fait, ajout outils tu vois, tu vas faire un truc, donc par exemplesi on revient sur le gestionnaire. Je vais la faire en pas. Ouais, tu pourras faire gestionnaire
00:47:12 :outils, donc hop ici, tu pourras dire add tool, comme ça, et en utilisant cette fonctionbah là ça va te dire, ça te ferait un input, entrez le nom de l'outil. Ouais. Et effectivement
00:47:26 :toi peut-être que tu n'aurais jamais en fait à manipuler directement cette classe après,toi tu passerais à chaque fois par ton gestionnaire, tu lui dirais voilà, ajoute un outil, entrezle nom de l'outil, là toi tu dirais, tu dirais, tac, tu dirais je sais pas, rf002, aprèsça te dirait entrez la date, etc. Et puis à la fin, une fois que t'as fini, bah hop
00:47:56 :ça se sauvegarde automatiquement dans ton fichier, et puis t'as même pas besoin d'appelerle save ou quoi que ce soit, ça se fait tout seul tu vois. Ok. Ouais, je vais regarder
00:48:05 :ça. Et c'est juste que en fait à chaque fois tu vas, comme je te dis ça va pas changer,le seul truc vraiment qui change dans tout ça, c'est surtout cette partie là, c'estsurtout la manipulation des données, parce que le fait de passer par de l'orienté objet,bah t'auras plus besoin de t'embêter avec des dictionnaires tu vois. Tu vas pouvoir avec
00:48:28 :ton outil avoir des attributs et stocker ça, et tu vois c'est quand même plus simpled'util.date que de faire outil, crochet, machin, crochet, truc, crochet, tu vois. Ouais
00:48:39 :bien sûr. Et c'est juste une façon différente de faire les choses. Après tu peux faire,on peut tout faire avec des dictionnaires, c'est possible aussi, mais pour des trucscomme ça où là t'as vraiment un objet qui a des attributs et ces attributs vont êtredifférents en fonction des objets que tu vas avoir à traiter, bah là l'orienté objet
00:48:58 :c'est parfait. C'est ce qu'il y a de mieux quoi. Ouais ouais ouais. Enfin en tout casc'est logique tu vois par rapport à notre façon de pencher, c'est logique tu vois.
00:49:05 :Donc voilà. Donc je sais pas si les autres vous aviez des questions aussi là dessus,si vous êtes tous un peu rendus dans l'orienté objet ou si vous êtes un peu, oh là, dequoi il parle, je sais pas. Ça a l'air d'aller, ou alors je vous entends pas. Je vois les,
00:49:31 :Yastine ouais. En fait l'orienté objet c'est toujours compliqué un petit peu à comprendreaussi, parce que pour le mettre en place c'est ça qui est compliqué en fait. Mais sinon
00:49:46 :après c'est vraiment logique, là typiquement l'exemple que t'as mentionné ici, ça devientplus visible au final. Ouais. Chaque référent c'est un objet et donc vraiment ça devient
00:50:02 :logique. Ce qui est, comme tu dis, ce qui est plus difficile effectivement c'est quandquelqu'un le fait devant toi, tu vois, généralement tu dis ah bah oui effectivement c'est logique.
00:50:11 :Ce qui est difficile c'est souvent de savoir est-ce que je crée un attribut, est-ce queje fais une méthode, combien j'en fais, où est-ce que je les mets, ce que j'ai faitpar exemple séparer l'outil du gestionnaire, ça c'est le genre de choses que vous prendrezl'habitude de faire probablement plus par la suite, parce qu'au début vous allez faire
00:50:30 :une classe, vous allez tout mettre dedans, vous allez avoir des fonctions qui vont faire50 lignes, et donc ça c'est plus voilà de la, comment dire, sur la beauté du codeaprès que vous allez, c'est les fameux principes solides que vous avez déjà probablemententendu ou vu évoquer. Il y a le S qui est le single responsibility, le L qui est le
00:50:51 :principe de l'ISP je sais plus quoi, le O je sais même plus ce que c'est, chaque lettreen fait est un principe, et donc single responsibility par exemple c'est justement cette idée quequelque chose, que ce soit une fonction, une classe, une méthode, un module, peu importe,ne fasse qu'une seule chose, donc que tu ne te retrouves pas à avoir, tu vois là dans
00:51:15 :le get tools par exemple, si dans le get tools à la fois tu récupères les outils et enplus tu mets à jour ta base de données et en plus tu fais un autre truc, bah là tuferais trois choses à l'intérieur de cette fonction et ça irait pas. Il faut vraiment
00:51:31 :avoir des trucs très séparés, très, comment dire, je trouve plus le mot, encapsulés,pour pouvoir si tu dois changer un truc, faire en sorte que tout s'écroule quoi, parcequ'il va y avoir le moins effet de bord possible aussi.
00:51:48 :Après tu me dis, en fait ce qui est dur c'est de savoir par où commencer en fait, par exemplet'as un, typiquement ici t'as un projet, est-ce qu'il ne faut pas par exemple prendreune feuille et commencer un petit peu à décrire qu'est-ce qu'on doit vraiment faire, poursimplifier les choses, parce que c'est vraiment si on commence à créer des classes, à
00:52:14 :rajouter des objets juste comme ça, à un certain moment je pense qu'on peut se perdrefacilement.Bah il y a les diagrammes UML, je sais pas si vous voyez ce que c'est ces trucs là,donc ça effectivement c'est souvent en fait ce qu'on fait, et ça ça s'applique aussi
00:52:32 :par exemple, enfin ça s'applique à plein de choses, quand vous faites un projet Djangopar exemple avec des modèles, vous allez avoir ce type de diagramme aussi mais quiva représenter les modèles dans votre base de données et puis comment, quels attributsils vont avoir, comment ils vont être liés à d'autres modèles, donc ça vous voyez
00:52:48 :par exemple, très bon exemple ici, vous voyez on pourrait faire, on pourrait se dire bonbah je vais faire une voiture, donc comme tu dis Yacine on pourrait partir directementdans le code en se disant bon je vais faire une voiture, moi je vous conseille au début,ce que j'aime pas trop des diagrammes UML c'est qu'il y a certains cours, sur Open
00:53:09 :Source par exemple, ils le montrent assez tôt il me semble, et je trouve que ça peutun peu faire peur, on a l'impression qu'il faut absolument tout planifier dès le débutet j'ai vu des gens se perdre là dedans et en fait passer un mois à essayer de faire
00:53:23 :des diagrammes parfaits etc. et sans jamais en fait écrire une ligne de Python après,je trouve que c'est important de savoir que ça existe, de le visualiser aussi un peudans votre tête ou de faire des dessins etc. et de commencer à l'incorporer dans votre
00:53:37 :propre chaîne de pensée. Après faut pas non plus sur des gros projets où vous allezêtre 10 et puis vous savez que dans 2 semaines le projet il est commercialisé et qu'il fautque ça roule nickel et que vous allez pas avoir beaucoup de droits à l'erreur, il vaut
00:53:49 :mieux effectivement passer par ça le plus tôt possible pour vous assurer que vous avezprévu tous les cas de figure et qu'il n'y a pas un machin qui va devoir être séparéau dernier moment et qui va nécessiter justement beaucoup de refactoring. Mais là vous voyez
00:54:03 :c'est un bon exemple je trouve ce diagramme UML, on pourrait se dire je fais une voitureet puis on met tout dans une classe voiture et on pourrait se dire bah non en fait lavoiture finalement c'est plein de petits trucs, par exemple les roues on pourrait les utiliser
00:54:18 :pour un avion, le engine pareil ça pourrait être un moteur qu'on met dans une voitureou dans un avion donc finalement le moteur il peut être, il est pas forcément reliéà la voiture et donc là vous voyez que vous avez plein de trucs qui sont séparés etqu'après on peut donc juste modifier quelque chose sans avoir besoin, on pourrait garder
00:54:36 :la voiture toute seule, juste la carrosserie on va dire de la voiture qui change pas etpuis après avoir quelqu'un qui change juste la suspension et sans toucher à la voiture.
00:54:44 :Ok? Mais oui oui après il faut toujours, c'est comme toujours quand il y a le côtéplanification, je pense qu'il faut quand même pas trop tarder à rentrer dans le codepour essayer les choses, pour là encore frapper des murs et vous rendre compte que c'est unpeu ce qui est démotivant au début c'est que même une fois qu'on est passé à travers
00:55:07 :la compréhension de l'orienté objet et qu'on se dit ah ok enfin je comprends les attributsou ces trucs là, c'est que les premiers scripts qu'on fait souvent on se perd dansle côté organisation et donc on se dit merde j'ai passé un mois à apprendre un truc supercompliqué et en fait j'ai l'impression que ça m'aide pas parce que j'ai l'impression
00:55:24 :que mon code il est moins clair qu'avant et je sais pas comment l'agencer donc il y aun petit peu un après coup comme ça qui est un peu dur sur le moral mais c'est làqu'il faut rentrer après, une fois que vous avez bien maîtrisé l'orienté objet et je
00:55:40 :trouve que c'est un peu la dernière étape en général quand vous apprenez Python etc'est une étape qui dure longtemps c'est la beauté du code quoi. Donc c'est comment
00:55:49 :écrire du code qui est facile à maintenir, qui n'est pas redondant, qui est dry commeon dit donc DRY, don't repeat yourself, qui ne se répète pas etc. Et ça c'est un des
00:56:04 :trucs que j'ai prévu des formations là dessus parce que les concepts solides par exempleje les aborde pas encore dans mes formations mais c'est prévu pour cette année là jevais faire des tutos là dessus. Après c'est aussi des trucs qui vont varier en fonction
00:56:16 :des équipes dans lesquelles vous êtes, c'est des trucs un peu subjectifs aussi des foisil n'y a pas tout le monde qui va coder de la même façon donc il y a des gens qui vontfaire des choses d'une façon et puis vous allez aller dans une autre équipe et ça
00:56:26 :va être d'une autre façon donc c'est pour ça que c'est un petit peu difficile, ily a des grands principes et puis après il y a la réalité. En fait je me demande si
00:56:35 :je vais pas tout simplement repartir de quelque chose de vierge et puis tu vois. Oui bah aprèstu peux tu vois, moi je pense que là ce que t'as tu vois, ça t'a permis déjà d'organiserdes choses quand même, de savoir tu vois au niveau de la structure de données de quoi
00:56:54 :t'as besoin, de qu'est-ce que tu vas demander à l'utilisateur etc. Effectivement tu peuxrepartir de ça un peu comme un brouillon, faire un autre projet à côté pour pas toutessayer de refaire dans le même script et puis après plus rien y voir quoi. Et essayer
00:57:06 :de repartir de ce que t'as et effectivement là encore en y allant vraiment par petitsbouts. Donc essaye déjà de faire le côté outils tu vois, de pas t'embêter avec la
00:57:15 :livraison et de pas essayer de faire les trois trucs d'un coup mais de voilà, justecréer un outil tu vas voir ça ça devrait être assez logique et simple, juste le côtéoutils, créer un outil, arriver à limite à sauvegarder cet outil peut-être mais justeun outil tu vois, juste avoir un fichier JSON avec les caractéristiques de l'outil
00:57:32 :et c'est tout. Et puis après penser à comment tu peux faire ça sur plusieurs outils etpuis après sur les aspects de livraison et tous ces trucs là. Ouais je pense que la
00:57:40 :meilleure solution ça va être ça, ça va être de recommencer à zéro et puis commeça j'aurai moins de problèmes. Ouais après souvent tu vois ces étapes de refactoring,
00:57:49 :c'est rare que là c'est vraiment parce que t'es dans un processus d'apprentissagedonc tu vois on t'a conseillé de commencer parce que tu savais déjà, parce que si t'étaisparti directement dans le rayon topjet tu vois t'aurais explosé et puis ça t'auraitdémotivé trop rapidement. Mais après c'est clair que quelqu'un qui va, tu vois moi si
00:58:07 :je commence un script actuellement, dès le début je vais me dire bon bah ça je lefais avec trois fonctions ou alors je pars directement en oriente objet. C'est assez
00:58:15 :rare, à moins d'avoir vraiment mal planifié son truc, de tout commencer en fonction etpuis en plein milieu du projet te dire bah là en fait il faut tout changer tu vois,ça va être quand même, c'est rare. Oui oui non mais comme ça au moins je reprends
00:58:32 :les choses autrement quoi, parce que là je pense que je suis encore dans ce que j'aiappris avant et puis je vois pas les choses de la bonne manière je pense, j'essaie d'adapterquelque chose, voilà ça va pas. Oui t'essaies de prendre ton dictionnaire et le code que
00:58:48 :t'as et de le mapper sur de l'oriente objet alors qu'il faut effectivement repartir dezéro sur qu'est-ce que c'est ton objet, et puis par rapport à l'oriente objet. Ouais
00:58:59 :donc je pense que c'est pas la meilleure manière, enfin en tout cas pour moi je pense qu'ilfaut autre chose, je vais faire comme ça, de toute façon je reviendrai vers toi. Ouais
00:59:10 :bah ouais bien sûr, de toute façon c'est ça, c'est évolutif et c'est un peu ce quej'essaie de faire justement dans la formation avec la calculette ou des trucs comme ça,c'est après de revenir petit à petit et de montrer comment tu peux faire un premiertruc, après tu rajoutes, des fois tu changes, des fois tu dois repartir de zéro effectivement
00:59:27 :parce que tu peux pas juste repartir sur une base quoi. Mais ouais, non c'est tout àfait normal. Ok ça marche. Bon bah en tout cas merci beaucoup, je vais voir ça. Pas
00:59:40 :de soucis. Est-ce qu'il y avait d'autres questions? Donc du coup la partie questionsici que j'ai reléguée à la fin, est-ce que vous avez, là on arrive à pile 1h11,on est vraiment, mais si vous avez des questions on peut continuer, je sais pas s'il y a desgens qui avaient vu d'autres choses pendant la semaine et qui voulaient intervenir. Personnellement
01:00:02 :non. Moi non plus. A toi Loïc t'as des devoirs là. Ouais ouais. T'as de quoi faire là.Là j'ai tout ce qu'il faut. Ouais je vais être content d'avoir quelque chose qui tourne
01:00:20 :très bien. Ouais puis c'est bien parce que je trouve que c'est vraiment un bon projetparce que déjà c'est par rapport à ton boulot donc tu vois clairement ce que t'as besoinet tout et puis je pense que c'est un bon projet aussi après pour l'interface graphiqueque ce soit application de bureau ou web. Ouais ouais. Tu vas pouvoir reprendre cette même
01:00:40 :logique et puis voir comment après le faire sur de la base de données tu vois. Si tufais un projet web tu vas reprendre ce côté orienté objet mais après avec la persistancedes données du côté base de données et si tu le fais avec Django donc tu vas avoir
01:00:52 :le modèle et tout ça donc c'est, tu vois à chaque fois tu vas avoir la même basetu vois c'est toujours la même problématique de t'as un outil, il a des attributs, ilfaut que tu gardes une trace de tout ça et en fait il y a 10 000 façons de faire ça
01:01:05 :au niveau du code, au niveau de la façon dont tu stockes tout ça tu vois. Ouais maisje pense que c'est vraiment un projet qui va me suivre jusqu'à la fin de la formation.
01:01:12 :Ouais ouais. Mais c'est bien d'avoir un fil rouge comme ça. Ouais je suis content,je suis content d'avoir trouvé ça. C'est parfait. Bon bah écoutez si il n'y a pas
01:01:25 :d'autres questions on va s'arrêter là. Et puis donc là comme je dis à chaque foispour l'instant on les fait le vendredi, je vous tiens au courant si jamais ça change,si c'est une autre soirée pour la semaine prochaine mais je pense qu'on devrait garderles vendredis soir. Il y a encore des gens qui sont arrivés cette semaine là donc je
01:01:48 :referais peut-être un sondage comme je disais pour voir quelle journée, vu que là onn'est plus confinés, les gens ont peut-être envie de sortir le vendredi soir donc quandil y avait les confinements ça ne changeait plus grand chose mais bon. En tout cas je
01:02:04 :vous tiens au courant pour ça et puis n'hésitez pas encore une fois si vous avez des questionspendant la semaine, si vous voulez qu'on voie des choses ensemble comme on l'a vulà avec le projet de Loïc, le poster dans Question Live ou si c'est des trucs qui sont
01:02:16 :sur des données sensibles que vous ne voulez pas partager à tout le monde vous pouvezenvoyer un message privé et puis après on peut refaire des exemples sur des trucs abstraitsqui ne reprennent pas du code qui puissent être sensibles. Donc n'hésitez pas à me
01:02:28 :contacter en message privé aussi. Et le live sera disponible en replay aussi ainsi quevoilà il n'y a pas beaucoup de notes mais je vous mettrais quand même les quelquesliens que je vous ai mis sur le UML, ce petit exemple ici, je vous mettrais ça dans lesliens et tout ça sera disponible sur Dockstring, je le remontre pour ceux qui ne l'ont pas vu
Aucune occurrence trouvée pour « ».
Bravo, tu es prêt à passer à la suite