 pas de problème. Bon, on est un petit peu victime de notre succès et c'est tant mieux. La seule chose, c'est qu'évidemment, ce sera un peu moins convivial que si on était 5 à l'entour d'une table. Mais j'espère que tout va pouvoir bien fonctionner au niveau technique et que ça sera quand même assez fluide, comme si on était 5 ensemble. J'en profite pour rappeler qu'il y a plusieurs membres de l'équipe Montréal-Payton peut-être se signaler. Yannick, Mathieu, Cyril, il y a Derek qui se manifeste pas, il y a Pierre ici, Jean-Philippe qui connaissent très bien Payton, certainement mieux que moi. En fait, moi je ne suis pas un développeur du tout, je suis un gestionnaire de projet. Je faisais du PHP avant, j'ai découvert la capacité de scripter mes pages HTML et j'étais tout fasciné. Et à un moment donné, je suis par la faute de collègues qui m'a poussé vers Payton en disant, ça serait vraiment intéressant qu'on aille vers ça. Je suis tombé dans Payton et j'ai découvert l'univers Payton que je souhaite vous montrer aujourd'hui. Ce qui est génial à la grande différence peut-être de PHP, je parle de mon histoire personnelle, et peut-être même de Java que je connais moins dans ces utilisations, je dirais professionnelles, c'est la versatilité de Payton. C'est-à-dire vous pouvez faire des applications web, vous pouvez gérer, tous les admins du système peuvent monter un paquet de scripts d'administration de leur serveur, vous pouvez mettre du Payton dans votre téléphone Android, vous pouvez l'utiliser pour faire des bottes dans les salons, c'est extrêmement versatil. Ce soir, vous comprendrez qu'en deux heures, on n'a pas la prétention de monter toute la puissance du langage et toutes les librairies. L'intérêt, l'objectif, et je vous garantis qu'on va y arriver, c'est de vous donner le goût au langage, de vous montrer sa simplicité et surtout que vous donnez tout ce qu'il faut pour que vous puissiez continuer, et qu'on continue ensemble dans des ateliers plus spécifiques après. Donc vous montrez comment faire pour explorer vous-même Payton et puis monter vos scripts, vos modules. Alors, on a pris un tout petit peu de retard. Je propose qu'on essaie de prendre une pause dans une quarantaine de minutes, peut-être une pause assez longue dans la mesure où il y a des paquets à installer pour la suite, et puis je sais qu'il y a des personnes qui sont arrivées à l'heure ou peut-être juste un peu en retard aussi. À ce moment-là, on profitera de cette longue pause-là pour s'assurer que tout le monde dans l'environnement technique, si ça fonctionne plus ou moins bien, parce que pour toutes sortes de raisons, peut-être travailler en équipe aussi ou sinon suivre ce qui va se passer. Ok, alors sur le site de Montréal-Piton, on a un petit R ici qui est important de ne pas oublier. On a un outil RedMind de gestion de projet et j'ai créé une page wiki pour le projet Workshop Ucam, donc sur wiki, où il y a le plan de match aujourd'hui. On peut peut-être regarder ça rapidement. Je vais parler dans une première partie, d'abord je vais vous dire où est la documentation, puis s'assurer que les environnements sont corrects, on devrait être bon. Ensuite dans les bases-là, c'est la partie un peu plus théorique sur les types essentiellement, la syntaxe, le langage lui-même, puis de l'explorer dans l'interprétaire, de façon interactive. Ensuite, c'est là qu'on va se faire du fun avec RoboJabard, qu'on va essayer comme, disait mon ami, de pimper, c'est-à-dire de l'améliorer vous-même avec certaines fonctions, parce que vous serez capable de coder dans quelques minutes. Aussi, un sandage de satisfaction que j'espère va fonctionner. On va essayer de régler ça pendant la pause aussi. Voilà. Ça, c'est le plan de match. Je vais laisser ici en haut un certain nombre de points de détail et puis tout va se passer après dans l'interprétaire. Alors, oui, cet atelier-là, je l'ai présenté avec des collègues dans le cadre d'une semaine de tech qu'on a organisé. Je vous ai laissé l'URL ici, juste pour vous dire que l'ensemble de la formation ou de l'atelier a été présenté dans un atelier Jabard, justement, c'est-à-dire avec... Fait que j'écrivais la ligne par ligne, fait qu'une chance j'avais préparé mon texte, je faisais du copier collé. Mais vous pouvez voir toutes les archives de discussion. Donc, s'il y a des bouts, après que vous voulez revoir, parce que là, ça sera nettement plus orale, finalement, que écrit. Alors, c'est objectif. Aujourd'hui, on va coder dans l'interprétaire. Et on va explorer donc avec ça les bases du langage Python. Mais ce qui est un peu embêtant de coder dans l'interprétaire, c'est que, bon, c'est sûr, on pourrait sauvegarder notre session, sauf qu'à un moment donné, c'est pas objectif. On veut faire des scripts. Donc, on va voir comment faire un script Python. C'est vraiment pas compliqué. Et on va l'exécuter, on va faire exécuter par l'interprétaire. Ensuite de ça, ici, je ne l'ai pas marqué dans les objectifs, mais je vous montrerai comment faire un module. D'ailleurs, le robot, ça sera un vrai module, un bot, qu'on va exécuter, étudier, puis modifier. Les documentations, je ne sais pas si vous voyez bien. Par ailleurs, c'est clair. Tout le monde, surtout au fond, vous voyez bien. Excellent. Alors, la documentation Python. Alors, ce n'est pas très compliqué à retenir comme URL. Voilà. Python.org. Ça, c'est la page à retenir quand on cas dans Python. Là-dedans, vous voyez, on va travailler en Python 2.x. Donc, 2.7 ou 2.6. Moi aussi, je suis en 2.6, je ne me trompe pas. La différence avec trois, il y a certaines différences fondamentales. Comme je vous dis, moi-même, je ne suis pas développeur. Je peux vous en donner une que je sais. C'est notamment de la gestion des chaînes de caractère qui est différente. On va y revenir. Mais il y a certainement plus d'amélioration. Vous pourrez en parler avec nos grands geeks ici qui vont pouvoir vous expliquer avec bonheur les différences entre Python 2.7 et 2.3. D'ailleurs, si vous êtes vous-même intéressé sur la page d'accueil, il y a la page d'accueil de Python. Il y a un petit topo là-dessus. Comment choisir entre deux et trois? Voilà. Donc, on ne fera pas l'atelier là-dessus. Ok. Déjà, ce qu'on peut voir, et d'ailleurs, c'est là où je clique le plus souvent, il y a un tutoriel. C'est le tutoriel officiel. Donc, à défaut d'avoir des ateliers à Lucam, vous pourriez vous asseoir tranquillement chez vous ou lire ça. Et vous avez le tutoriel officiel Python qui est là. Qui va aller plus en détail, évidemment, que ce qu'on va voir là. Mais on va avoir couvert une bonne partie. Et puis, la page de documentation de la librairie built-in de Python. Donc avec ça, même si on arrêtait là, vous avez déjà de la matière pour continuer. Ok. Ensuite, pour coder, qu'est-ce qu'il vous faut? Ben, un éditeur texte. Puis, déjà, je le demande toute généralité. Moi, je suis plutôt rédimentaire. On ne va pas faire la guerre entre IMAX, VIM et tout ce truc-là. Moi, je travaille un petit éditeur texte G-édite qui vient, par défaut, sur les systèmes Linux. C'est comme les différentes blocs notes sur Windows. Alors, je suis très heureux avec ça. Le seul chose qui est intéressant dans l'éditeur texte, c'est souvent la coloration syntaxique pour s'y retrouver. Ça nous donne un bon coup de main. Un truc qui est intéressant aussi, c'est l'identation. En Python, l'identation, c'est important. En fait, c'est tellement important que le langage plante si vous faites une faute d'identation. Donc, ça vous aide à structurer le langage. En fait, on verra un peu plus loin, justement, qu'on abordera la syntaxe, qu'il n'y a pas toute sorte de braquette pour structurer les blocs de code. C'est l'identation qui fait foi. Donc, de pouvoir indenter un certain nombre de blocs de code, comme ça ici, d'un coup, avec en sélectionnant le table, c'est très utile qu'en code. Voilà. Aussi, l'identation, comme je vous disais, par convention, et je vais revenir, je vous donnerai une page qui fixe un peu les conventions syntaxiques Python. Par convention, on met quatre espaces pour faire l'identation. N'utilisez pas de tables. On n'en veut pas de tables dans le code source. Donc, prenez le temps d'aller dans votre éditeur. Dicante, vous utilisez table, remplacez ça par quatre espaces. Je ne vous fais pas la démo ici parce que vous n'avez certainement pas mon éditeur. Les interprétaires. Python, c'est un langage interprété. Ça veut dire qu'une finie est compilée quelque part, mais ça, ça ne nous intéresse pas. Concrètement, pour nous qui développons, on n'a pas besoin de compiler notre code source pour voir si il marche. On peut l'exécuter, le faire exécuter par l'interprétaire. Donc ça, c'est cool. Les interprétaires, par défaut, c'est Python. C'est donc le logiciel qu'on vous a demandé d'installer qui vient par défaut sur les systèmes Linux et Mac aussi, je crois. Il existe aussi iPython, qui est vraiment tripant. Je vais utiliser ça, moi. C'est pour interactive Python. Ça nous permet d'explorer le langage beaucoup plus facilement. Je vous montrerai ou pour être juste, les astuces dans Python, aussi dans l'interprétaire Python, je dirais nature, originale, comment explorer les champs. Bon, pour les sources, je vous ai mis les URL ici. Ça sera plus pour la deuxième partie, le code source du robot qui est là. Puis l'ensemble des documents, le plan détaillé qui est ici, qu'on va passer ensemble, se trouve aussi dans les sources sur le projet sur notre RedMind, Montréal Python. Alors, c'est parti. On commence. Alors, première chose qu'on fait, on va lancer l'interprétaire. Je lance iPython. Alors, il m'explique que moi, je travaille en Python 2.6.5. Ça, ce n'est pas des choses super intéressantes. J'ai un problème parce que je ne vois pas tout, donc je vais replacer. Voilà. C'est vrai de bon. OK, alors, l'interprétaire fonctionne par une poutte en poutte. Alors, vous lui donnez des choses puis vous répondez aux choses. Tout simple. Alors, par exemple, si je lui dis le chiffre 5, il me retourne 5. C'est super génial. Mais on verra qu'en faisant des trucs un peu plus complexes, le but de l'interprétaire aussi c'est de développer et interactivement on explore avec le code. Puis quand on a des trucs qui nous intéressent, on va les mettre dans notre script final. Plutôt que d'aller coder dans le script de le réexécuter, coder. Donc, c'est vraiment un outil, c'est le réflexe pour explorer. Notamment des nouveaux modules. On va en découvrir plein aujourd'hui. Si vous ne savez pas comment faire, vous l'apportez dans l'interprétaire puis vous explorer. C'est avec DS. Si je marque ceci est un commentaire, il n'y a rien qui s'affiche. C'est un commentaire. On le verra un peu mieux dans l'exécution de code. Mais ça, ce n'est pas une chaîne de commentaire, c'est un commentaire. Il n'y en a pas d'autres symboles. Des fois, dans d'autres langages, on va des slash-étoiles puis ça fait des blocs. Donc, nous, ce qu'on utilise, c'est de mettre des DS partout. Ça, c'est peut-être un petit plus dans votre éditeur aussi qui soit capable de sélectionner un bloc et de mettre un peu de primitif, j'y vais à la main un peu. Tout le monde se moque de moi. Mais ça marche! Déjà, les variables. Vous n'avez pas besoin de mettre de dollars ou d'autres fiéritures. Vous voulez créer une variable qui s'appelle VAR puis lui donner, par exemple, la chaîne de caractère des vines qui est mon prénom par ailleurs. Et voilà, c'est stocké. Et si j'ai pris, il me donne comme une poudre VAR et il va me donner la valeur de la variable. Bon, c'est tout. Vous avez vu que j'ai fait une affectation à ma variable, je n'ai pas mis de point virgule après. Pourquoi un point virgule? Pas besoin, en Python. Et les blocs de code, on va y revenir. Mais si, par exemple, je vous fais une liste rapidement avec les valeurs 1, 2, 3, puis je dis pour chaque item dans ma liste, je dis tout simplement d'imprimer l'item. C'est un peu ridicule comme code. Mais vous voyez que ici, je n'ai pas utilisé d'accolade pour structurer une boucle. Pareil pour le conditionnel ifL, printL. Bon, c'est un peu ridicule, mais ça marche. Et ifFalse. Donc là, c'est une constante. On va revenir. Oui, c'est un mot-clé du langage qui veut dire printFalse. Là, la condition devrait échouer. Donc je vais juste vous montrer que je n'ai pas d'accolade qui vient structurer ni mon if ni mon for qui me faisait boucler. Bien, ça, c'est intéressant. Par contre, qu'est-ce que j'ai? J'ai de l'indentation. J'ai mon print qui est indenté et avec quatre caractères, s'il vous plaît, pas de table. On continue. La syntaxe, ça se résume pas juste à ça. Il y a un paquet de mot-clé il y a un lien ici qui s'appelle le Pép8. Quand vous verrez, quand vous allez parler de Pép8 avec des pitonneux, vous allez commencer à avoir leur respect. D'ailleurs, tout ce que je vais vous montrer n'est pas nécessairement Pép8. Pép8, c'est des conventions de style pour coder un fichier Python qui a de la l'ur, je dirais. Pas nécessairement qui... j'allais dire qui compile, mais on parle plus de syntaxe, on parle de style. C'est important. Les Pép, ça veut dire Python enhancement proposal, voyez ça comme les RFC. Un peu... Donc, c'est des propositions, faudrait voir leur statut, mais considérer le Pép8 comme déjà plus que validé. Je vous montre rapidement à quoi ressemble le Pép8, le fameux. Évidemment, c'est en anglais. On en tiendrait pas rigueur. En gros, comme c'est ici pour Python code. Dans le Pép8, ce qu'ils vont vous expliquer, souvent, ce qui revient, dans votre ligne de code, il ne faut pas que ça dépasse 80 caractères. Ça fait un peu au du cool. Mais, c'est quand même agréable. Comme ça, on peut travailler avec deux fenêtres, une à côté de l'autre. Donc, ça, c'est pas mal. Ils vont expliquer quand laisser des lignes espacées. Je vous dirais, ce n'est peut-être pas la première chose à étudier. D'autres personnes vont lire votre code. C'est tout l'intérêt d'avoir un style qui est cohérent, qui se tient. On continue. Les types. Ça, ça va aller vite. Mais, c'était quasiment le coeur de la première partie. Je vous montre en rafale les types. Il y a un type built-in qui s'appelle non. Un peu comme dans les bases de données, on n'a nulle. Je le stocke dans une variable. Ça va l'heure, ce n'est rien. Donc, voilà, c'est... Ça peut être utile pour initialiser une variable quand vous ne savez quel type on souhaite avoir. Bon. Vous retournez une fonction qui ne va retourner rien dans certaines circonstances. Ça ne retourne pas, par exemple, plus de lise vide. Il va retourner rien, par exemple. On peut tester le type non. Les bouleins, assez simples. Les mots-clés, notez les majuscules. Mon code est en bas. Oui, super. B égale troupes. Ça me retourne troupes et B égale false. Alors, il y a juste troupes falses. Juste retenir qu'il y a des majuscules. C'est boulein, tout simplement. Ensuite de ça, les entiers. Ça, c'est la partie, je dirais, un peu plus honteuse de Python. En tout cas, les opérations avec les entiers. Si je prends l'entier 15, mettons, on va dire, on va mettre ça plus simple pour se faire A égale 15. On va dire que B est égal à 30. Évidemment, on peut faire des sommes. On peut faire des subtractions. A moins B. On va envoyer un nouveau style. Ça aurait été bien, je laisse un espace après le moins. Par contre, au niveau des divisions, si on fait, je sens les stockings dans les variables, je cas directement les entiers. Si je divise un par deux, on s'attendrait à avoir 0.5, par exemple. Sauf que ça retourne zéro. C'est lait. Je vous assure que le type qui suit les float, c'est des decimales, fonctionne bien. Donc, si vous avez des opérations à faire, à coder, allez-y avec des float. Peut-être que ça ne choque pas certain de personnes. Si vous voulez en savoir davantage là-dessus, je vous prie de lire. Mais si vous commencez à lire sur le web, sur le sujet. Par ailleurs, ça ne veut pas dire que Python est incapable de faire des maths. Je vous rassure. Au contraire, je dirais même qu'il existe un superbe librairie qui s'appelle Matplotlib, qui est en fait l'équivalent presque de Matlab en Python. On avait eu dans le cadre de Montréal Python des collègues, je ne sais plus s'ils étaient de Lucam ou de McGill qui avaient présenté Sage, si je ne me trompe pas, qui est de Lucam, un super tout le kit de mathématiques qui vous permet de faire virtuellement tout et n'importe quoi. Je ne suis pas mathématicien, je ne peux pas vraiment juger. Tout ce que vous voulez, c'est un peu loin de mon monde. On va continuer avec nos petits types. On a vu les float, on a vu les entiers. Faites juste gaffe quand vous faites des opérations avec les entiers, notamment au niveau de la division. Les chaînes de caractère. En fait, il y en a trois types. Je pense que je n'ai juste mis deux. La chaîne de caractère se déclare avec des simple quotes ou des double quotes. Il existe un autre type de chaîne de caractère que je parle comme un humain, mais au niveau Python, c'est carrément un autre type qui s'appelle unicode. À ce moment-là, la différence entre le string et l'unicode, le string, c'est de la ski et l'unicode, c'est de l'unicode. Encodé a été fuite. Pour ceux qui sont peut-être plus débutants en informatique, toutes les nuances dans l'encodage de caractère, tout ça, c'est un univers en soi. Sachez que si vous devez utiliser des caractères dans une chaîne, ça, ça fonctionne. En fait, j'ai mis S, mais je n'aurais peut-être pu mettre unicode. Python n'est pas très bon pour la représentation des trucs dans le sens où je pense même que c'est René. Je l'en parlais avec un collègue qui connaît ça mieux que moi. Si vous essayez, par exemple, de déclarer faite avec l'accent sans mettre le U devant, ça marche. Ça donne le même truc. Print S. Oui. Le print est le correct. Je pensais qu'il allait m'insulter que je mettais un accent sans mettre de U. Dans le script, il devrait m'insulter. Dans le script, il devrait m'insulter. Je saute un peu du coque à l'angle, mais à la fin, si vous avez aimé l'atelier, on se propose d'en présenter un autre sur le développement web, notamment avec le framework Django, qui est relativement très, très simple. Et le lien avec ce que je viens de vous présenter, c'est que Django gère ça automatiquement pour vous, que vous mettez des U ou pas. En 3.0, les strings normaux devraient être des strings unicodes. En fait, c'est pas juste de la ski. Vous en parlerez à mes amis vietnamien. Voilà. Maintenant, ça, c'est les types de base. Avec ça, on fait un certain nombre de choses, mais ce qui vient intéressant, c'est des types que je pourrais implorer à appeler de structure. Par exemple, les listes. Je vous en ai montré un rapidement. Avec les crochets, les brackets en anglais, vous pouvez lister des trucs. C'est génial. On imprime la liste. Ils sont ordonnés. Sauf faire un ma part. La liste est ordonnée. Le tuple, tout de suite après, on va jouer avec les types. Allez voir ce qu'il y a derrière. C'est un peu léger comme langage, mais c'est ce qui se passe derrière qui est intéressant. Les tuples, considérez ça juste comme une liste immuable d'objets. Je vous en parle parce que vous allez le voir dans le code. Vous allez voir m'emmener des parenthèses avec un certain nombre de choses séparées par des virgules. La liste immuable. Vous ne pouvez pas rajouter d'éléments à supprimer. Si vous n'avez pas d'imagination pour savoir ce que ça peut faire, utilisez-le pas. Les dictionnaires, c'est avec les acolytes. Les tuples, je disais, juste pour vous montrer que je suis capable de faire un tuple. Je peux faire un tuple de A, de B, des lettres A, B et C. Souvent, ce qu'on va faire, ce qui est syntactiquement correct. Mais quand on met les trucs sur plusieurs links, ça permet de rajouter des éléments sans se soucier si on avait mis un tuple. Tout simplement. Les dictionnaires, c'est ce qu'on va appeler dans d'autres langages, des arrays. C'est une association de clés de valeur. Ce qui est intéressant en Python, c'est que la clé peut être plusieurs types de choses. Je crois que formellement, c'est un objet sérialisable. Quand je parle d'objet, Python est un langage où tout est un des objets. Ça veut dire les... le chiffre 1 que je viens de taper, le chiffre 1 que je mets là, c'est un objet aussi. C'est une instance d'un entier. Donc, si je fais un dictionnaire, par exemple, je pourrais très bien faire un dictionnaire avec comme clé 1 qui porte la valeur, je sais pas moi, je suis un peu intrigue là, mais devine. La clé B qui pourrait avoir mon nom de famille, c'est-à-dire rester dans le même... ok. Et je pourrais avoir à ce moment-là une liste, ça marche pas, parce que c'est... ça marche pas. Mais bon, ce que je veux vous montrer déjà, avec un entier puis un string, ça fonctionne. On peut accéder aux valeurs en utilisant en appelant la clé, je pense, c'est une façon d'appeler ça, directement en passant la clé de... voilà, ou en passant la clé, par exemple ici, qui est un string. Évidemment, si vous aviez une variable, par exemple, C est égal à B, ma variable C, je peux passer une variable C, qui va me retourner le truc, ok. Tous ceux qui sont à l'aise un peu en programmation, on va voir que c'est des choses assez simples. Mais syntaxement, c'est intéressant. Alors, je suis toujours au plan de match. Je continue. Je veux vous parler un peu des objets d'ename space comme prélude à l'introspection. Alors, je... je ne prends pas pour acquis que tout le monde connaît l'orienté-objet, donc je vais présenter rapidement quelques notions d'orienté-objet. Ça va être très rapide. Vous m'excuserez, il y a peut-être des cours de 45 heures là-dessus, on va dire, wouah, j'ai oublié des grands mots, mais on va y aller rapidement. Alors, l'orienté-objet, supposons que vous avez dans un monde le monde dans lequel on vit, un certain nombre de personnes. On va mettre un Devine quand même là-dedans. Alors, j'ai Devine, j'ai mon ami Mathieu, pis j'ai mon copain Cyril aussi, donc on est les trois là. On est trois individus qui existent pour vrai. Sauf que, on peut répondre en quelque part une certaine définition de personnes. Donc, on peut inventer une espèce de notion qu'on va appeler des personnes. Vous pouvez voir ça comme des personnes, et ça c'est l'idée philosophique même, de personnes. Donc là, ici, la notion de personnes, ça ici, c'est des personnes. Ce qu'on va appeler au niveau informatique, tout simplement, on va appeler ça ici des instances de la classe personne, ok? Et on va appeler ça aussi des objets. Souvent, on va appeler ça des objets. Mais la classe va être aussi un objet, mais là, on rentre dans des trucs où, attention, comment c'est possible? Mais c'est parce qu'il va être l'objet d'une classe, par exemple, qui est un peu plus encore abstrait au-dessus. Ce qui est important de savoir, c'est que ça, c'est différent de ça. L'idée, la définition de personnes existe. Ceci dit, un coup qu'on est d'accord sur le fait qu'il y a des personnes et la notion de personnes, on va pouvoir commencer à coder ce genre de choses-là. On va pouvoir créer une classe personne. Et là, on pourrait se dire, je peux faire de la pseudo-modélisation, on va dire, c'est drôle, toutes les personnes, ils vont avoir un nom, puis vont avoir un prénom. Ça, c'est du pseudo-UML, parce qu'on s'en fout un peu de la convention. Ah, c'est génial, c'est vrai que toutes les personnes ont des noms, des prénoms. Ça, on va appeler ça des attributs, des attributs, des objets ou de la classe, dépendamment de si je parle du nom en général ou du nom de quelqu'un. Mais plus que ça, on pourrait dire, par exemple, si on continue à modéliser pour le plaisir, on a d'autres choses à faire. Par exemple, on va dire, c'est intéressant, j'ai la date de naissance, je vais marquer juste d'EDN. J'ai la date de naissance de quelqu'un. Peut-être dans une application on va être intéressé à avoir l'âge de quelqu'un. Par exemple, il peut accéder à des sites, quelconque, dépendamment de son âge. Alors pour avoir l'âge de quelqu'un, on va quand même pas stocker ça sur la personne, dans la mesure où ça change dans le temps. Non, je parle informatique, je parle moins de la modélisation dans cette situation. Ce qu'on va faire en informatique, on va donc coder sur une classe les traitements qu'on veut faire sur le certain nombre d'informations qu'on veut stocker. Ces traitements-là, c'est rien d'autre que des fonctions. Là, j'ai écrit du Python, on le verra tout à l'heure. Par exemple, on pourrait donner âge, ou si vous voulez, guêpe âge. Bon. Puis, conceptuellement, ça, il va exploiter la notion de date de naissance, il va comparer avec la date d'aujourd'hui, puis il devrait pouvoir nous computer l'âge. Ça, on appelle ça des méthodes. Des méthodes, là je reparle Python, sont des fonctions qui sont définies dans le contexte d'une classe. Ok? Donc, quand je dis fonctions, méthodes, c'est la même chose, mécaniquement, sauf que la méthode à flotte pas dans l'univers est attachée à une classe. Ceci dit, dans la documentation Python, quand vous allez explorer, faire l'être expression, puis je vais le faire dans un instant, les attributs ont un nom et les méthodes ont des noms. En l'occurrence, le nom de la méthode ici c'est âge. C'est le nom de la méthode. Et l'attribut, je vais avoir le nom prénom, le nom nom, le nom date de naissance, ou d'EDN. Ce qui est le petit truc, c'est que si on veut exécuter un moment donné les méthodes, il faut pas oublier de mettre les parenthèses dans l'exécution. Et là, ce qu'on va faire, je vais vous montrer, on peut s'amuser à coder ça pour le fun. Je suis pas dans un bon endroit. Je peux m'amuser à coder tout de suite une classe personne, comme ça, ou ou je vais définir, par exemple, je vais les mettre directs comme ça, prénom est égal, c'est un string vide. Non, c'est un string vide, mais c'est légal, généralement on code ça dans d'autres contextes, j'ai un peu tout nu. Je vais dire que j'ai une date de naissance qui va être, je vais le mettre un string, on peut évaluer comme une date à tout hasard. Et là, je vais définir ici ma fonction, ma méthode age qui va me retourner qui va me retourner rien du tout. Juste pour avoir une structure, ça devrait être syntaxement correct, parfait. Alors je peux créer une variable que j'appelle devine, qui va être une instance de personne. Je vais rapidement, mais c'est des choses qu'on voit dans d'autres langages, pas besoin de new, qu'on voit dans d'autres langages, c'est très clair. La classe ici est accessible dans mon interprétaire, parce que j'ai juste de la déclarer avant, je peux l'utiliser, c'est normal. Alors je crie une variable qui est devine, puis on peut aller voir maintenant, et là, s'il vous plaît, prenez un petit moment pour apprécier toute la puissance de l'introspection. En tout cas, au moins dans High Python, on verra qu'est-ce qu'on peut faire avec Python tout à l'heure. Je fais un point ici et je fais table et je vois tous les noms qui sont accessibles dans le contexte de devine. Quand je dis non, c'est soit des noms d'attribut, soit des noms de méthode. C'est pour ça que je vous faisais un peu mon petit blabla. Alors on voit que j'ai devine pointage. Cool. Alors si je fais devine pointage, je peux même mettre un petit point d'interrogation derrière pour aller voir de quoi on parle avec devine pointage. Et là, on sort la documentation de la méthode. Ce qui est génial, c'est qu'avec ces deux petites approches-là, vous pouvez voir tous les noms derrière. Donc tous les attributs et les méthodes d'un objet. Et comme je vous dis, tout est objet. Vous pouvez tout explorer dans votre interprétaire. Et avec ça, en mettant le point d'interrogation, vous pouvez appeler la documentation.