Python avancé (Python 301) | Kalob Taulien | Skillshare

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Python avancé (Python 301)

teacher avatar Kalob Taulien, Web Development Teacher

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Bienvenue sur Python 301 !

      1:27

    • 2.

      Créer votre premier cours OOP

      5:11

    • 3.

      Propriétés du cours OOP

      5:57

    • 4.

      Méthodes de classe OOP

      9:34

    • 5.

      Nettoyer le cours OOP

      2:35

    • 6.

      Hérité du cours OOP

      6:12

    • 7.

      Interfaces du classe OOP

      3:41

    • 8.

      OOP La super méthode

      8:31

    • 9.

      Méthodes dunder OOP

      9:22

    • 10.

      Erreurs et exceptions

      6:10

    • 11.

      exceptions en captage

      9:35

    • 12.

      Quels sont les décorateurs et comment en créer une

      7:09

    • 13.

      Quels sont les générateurs et comment en créer un

      12:19

    • 14.

      Pipenvs : un autre type d'environnement virtuel

      8:25

    • 15.

      Votre projet final

      20:09

    • 16.

      Résumé Python 301

      1:00

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

838

apprenants

8

projets

À propos de ce cours

Bienvenue dans Python 301, où vous allez apprendre à la connaissance en pointe de Python.

Dans ce cours, nous allons aborder ces sujets principaux :

  • Cours (programmation d'objets en matière d'objet)
  • Essayez et sauf (gestion d'erreurs grace.
  • Décorateurs (fonctions à l'intérieur de fonctions)
  • Générateurs (traitement de données performant)

Et votre projet final sera une appli bancaire ! En plus du projet dans la section Projet de cours.

Rencontrez votre enseignant·e

Teacher Profile Image

Kalob Taulien

Web Development Teacher

Enseignant·e

Hi everybody! I'm Kalob Taulien.

 

Here's the TL;DR (short) version about me:

I have been coding since 1999 and teaching people how to code since 2013 I have over 350,000 web development students world-wide I'm on the Wagtail CMS core development team (Wagtail is Python's #1 most popular website making system) I try my best to answer EVERY question my students have  I love teaching — it's definitely one of my natural talents  Also I love goats! (Great conversation starter with me if we ever get to meet in person)

Below you can find all my Skillshare courses. The categories go from easiest to hardest, except for the Misc. Coding Courses at the very end. 

If you're brand new to coding, start with BEGINNERS WEB DEV.&nb... Voir le profil complet

Level: Advanced

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Bienvenue sur Python 301 !: Bonjour et bienvenue sur Python 301. Je suis Caleb Colleen et je vais être votre instructeur aujourd'hui. Dans ce cours, nous allons apprendre des concepts Python plus avancés, tels que la programmation orientée objet, en utilisant des classes, essayer sauf les générateurs, les décorateurs. Et puis à la fin, nous allons créer une application bancaire pour tirer le meilleur parti de ce cours, vous devriez déjà être un peu familier avec Python. Vous devriez vous considérer comme un niveau intermédiaire ou junior, un programmeur Python. Et vous allez faire un peu de devoirs à la fin de chaque leçon, nous allons apprendre tout sur les classes, les propriétés, les méthodes, les méthodes de défenseur, héritage de classe, la classe et toutes sortes de choses entre les deux. Ensuite, nous allons gérer gracieusement les erreurs fondamentalement afin que notre programme ne cesse pas de fonctionner. Pour que notre programme puisse gérer gracieusement une erreur et continuer à fonctionner. Et comme je l'ai déjà mentionné, à la toute fin, nous allons avoir un projet où nous créons une application, une application bancaire où vous pouvez retirer ou déposer de l'argent en utilisant Python. Ensuite, vous allez enregistrer toutes vos transactions dans un fichier de transactions. Je suis Caleb Colleen et je travaille avec Python depuis un certain nombre d'années maintenant. J' utilise Python tous les jours, à la fois professionnellement et pour Hobbes. Et aujourd'hui, je vais vous enseigner Python avancé. Bienvenue sur Python 301 avec votre hôte et instructeur, Caleb Tallinn. 2. Créer votre premier cours OOP: Commençons par lire notre première classe Python. Donc, tout d'abord, vous avez besoin de Python installé et vous devez être capable d'écrire un peu de Python pour utiliser ce module, pour utiliser Python trois, oh un. Donc, en face de moi ici, j'ai juste le code VS est juste un éditeur de texte simple. Vous pouvez utiliser PyCharm, vous pouvez utiliser des crochets, vous pouvez utiliser n'importe quel éditeur de texte que vous aimez. J' ai juste aimé le code VS. Alors devant moi, ce que je vais faire, c'est aller à View , puis aller au terminal et ouvrir le terminal. Et ça va juste me donner un terminal en bas et mon visualiseur de fichiers sur la gauche. Allons de l'avant et créons un nouveau fichier ici. Et appelons cette première classe dot py. Jetons un coup d'oeil à écrire notre première classe. Mais avant de le faire, nous devons jeter un oeil à une partie de la syntaxe. Donc, quand nous écrivons une fonction, c'est comme quelque chose dans les lignes de d f, nom de fonction. Fais quelque chose. Une classe est un peu différente. Maintenant, pour instancier une fonction, nous disons simplement le nom de la fonction, et c'est tout. Maintenant, une classe est un peu différente. Une classe commence par le mot classe, et cela va créer ce qui est connu comme un objet. Et en Python, tout est un objet de fichier en tant qu'objet. Une fonction est un objet. Une classe n'est pas un objet, mais elle est gérée légèrement différemment. Donc, une classe commence par la classe de mot-clé, puis nous lui donnons généralement un nom majuscule, ou au moins les mots en majuscules sont des lettres majuscules. Donc nous disons quelque chose comme la classe. C' est un animal. Et c'est littéralement tout ce qu'il y a à créer une classe puis à instancier cette classe ou, ou pour utiliser une terminologie moins sophistiquée pour activer cette classe, nous disons que l'animal est égal à, c'est un animal. À ce stade, cette classe est complètement inutile, mais cela fonctionnera. Cela ne nous donnera aucune erreur. Et nous pouvons le démontrer en entrant dans notre terminal et en tapant Python de première classe dot py. Et nous ne voyons aucune erreur. Cela signifie que cela fonctionne de la façon dont nous voulons qu'il fonctionne. Si vous ne voyez pas d'erreurs, c'est une bonne chose. Alors allons de l'avant et créons un véritable exemple de vie ici. Donc, cet exemple va être littéralement juste un exemple animal. Et nous allons utiliser cet exemple à travers presque tout ce module python 301 ou ce cours. Alors allons de l'avant et créons une toute nouvelle classe. On dit « classe ». On lui donne un nom deux-points, et ensuite on peut faire quelque chose ici. Maintenant, dans les prochaines leçons, nous allons parler de propriétés et de méthodes et de choses comme ça. Mais pour l'instant, allons de l'avant et donnons à ceci une propriété de symbole. Et c'est vraiment juste un mot fantaisie pour une variable à l'intérieur d'une classe. Et donc nous avons quelque chose comme une propriété. Et c'est en fait les mots-clés n'allaient pas utiliser qui utiliseront comme propriété, on est égal à quelque chose. Ensuite, nous pouvons instancier cette classe ou activer cette classe en disant que l'animal est égal à une classe animale. Il a les parenthèses. Il y a beaucoup comme une fonction. Et puis nous pouvons dire imprimer la propriété point animal un et vous pouvez le voir audiophiles pour moi en utilisant VS Code. Et donc c'est un peu comme un objet dictionnaire, mais un dictionnaire ressemble à ceci. Il cherche un mot clé. Dans une classe, nous utilisons la notation de points et ce point signifie simplement que va être une sorte de classe et c'est une sorte de propriété ou une variable à l'intérieur de cette classe. Allons de l'avant et lançons ça. Et on voit que ça dit quelque chose, peu importe ce qui n'est pas là. Maintenant, nous pouvons écraser cela et nous allons en parler dans les leçons à venir. On peut changer complètement ça. Nous n'avons pas à utiliser une propriété du tout. On peut littéralement nommer ça. Autre chose ? Je vais sélectionner ça. Aller à la vue ou est sa sélection, sélection ajouter prochaine occurrence. Et il va sélectionner les deux. Donc je peux écrire à deux endroits à la fois. Et je peux dire, c'est une propriété. Et quand je lance ça à nouveau, il va simplement imprimer le mot quelque chose. Et donc vous pouvez voir que ces deux-là, quand je, même quand je clique dessus, mis en évidence en même temps, ceux-ci sont mariés. Et pour donner un sens à cela, nous avons créé une classe appelée animal, lui avons donné une propriété, juste une propriété ennuyeuse et fade. Nous l'avons codé en dur, donc ce n'est pas très utile en ce moment. Il n'y a pas beaucoup d'utilité pour ça. Ensuite, nous avons instancié cette classe et nous la jetons dans une variable. Et en faisant cela, nous avons activé cette classe ou instancié cette classe. Ensuite, nous avons dit dans cette variable activer la propriété. C' est une propriété. Maintenant, en ce moment, c'est un peu comme un dictionnaire. La syntaxe est légèrement différente, mais c'est beaucoup comme un dictionnaire. Donc, ce que je voudrais que vous fassiez est de créer un exemple de classe Animal ou vraiment n'importe quelle sorte de classe. Donnez-lui une propriété, codez la valeur en dur, activez cette classe, puis imprimez cette propriété. Donc, faites essentiellement ce que j'ai fait dans cette vidéo. Lorsque vous avez terminé cela, passons à la leçon suivante où nous parlons un peu plus en profondeur des propriétés de classe. 3. Propriétés du cours OOP: Bienvenue de retour. Dans cette leçon, nous allons parler des propriétés de classe. Donc, pour poursuivre notre dernière leçon, je vais simplement copier et coller ce que nous avons de notre leçon précédente, que je viens de renommer à partir de la dernière vidéo. Juste pour qu'il soit un peu plus facile de gérer ces fichiers lorsque vous téléchargez la source. Mais je vais essentiellement prendre ce code exact et le déplacer dans cette leçon suivante, elle, et je vais le faire en allant de l'avant à travers Python 301. Donc, dans la dernière leçon, nous avons parlé de cette propriété. Nous avons une classe, c'est une propriété et c'est codé en dur pour être la chaîne, quelque chose. Maintenant, cela n'a pas besoin d'être une chaîne. Cela pourrait être un booléen, une liste ou un dictionnaire, ou il pourrait être littéralement n'importe quoi. Mais faisons usage de quelque chose qui est un peu plus compliqué. Alors faisons usage d'un dictionnaire. Donc on va avoir une propriété ici. Il va être réglé sur une forme quelconque de dictionnaire. Et ici, nous pourrions dire que T1 est alors égal à la valeur un. Et puis nous devons instancier ça. On l'a fait dans la dernière leçon. Nous utilisons la variable après l'instanciation de la classe animale. C' est une propriété et cela va imprimer un dictionnaire. Donc si je lance ça, il imprime un dictionnaire. Maintenant, nous savons qu'il s'agit d'un dictionnaire, et à ce stade, c'est juste une variable standard. n'y a rien de spécial à ce sujet. Il se trouve qu'il y a un cours ici. Puis une propriété. Considérez cela comme une variable. Et puis pour accéder à une clé comme nous le ferions dans un dictionnaire régulier, nous lui donnons juste le nom de la clé et cela correspond ici. Donc, quand je sauvegarde ceci et relance le script, nous pouvons voir qu'il dit la valeur un. Et donc nous allons voir cela beaucoup dans Python de niveau professionnel, nous allons voir la propriété définie comme dictionnaires. C' est une chose très courante. Et donc ça va être vraiment utile pour vous savoir que c'est une classe, c'est une propriété. Et cette propriété, son type de données ou sa structure, est un dictionnaire. Ce qui veut dire que nous pouvons alors chercher les choses, mais ce n'est pas nécessairement un dictionnaire. On pourrait dire que cette liste et je vais juste lui donner n'importe quel nom est égal à une liste de peut-être noms. Donc, nous avons canne, Caleb, et ravin, qui est un petit chat mignon, en fait n'est pas littéralement est un assez gros chat. Et puis on pourrait dire, imprimer l'animal, cette liste. Et quand on réexécutera ça, on verra ici, ça dit Cain, Caleb, et Gully, et ça apparaît comme une liste. Maintenant, parce que c'est une liste, nous pouvons faire l'indexation et la découpe et tout cela comme une variable de liste régulière se trouve juste que c'est à l'intérieur d'une classe. C' est vraiment tout ce qu'il y a. Donc si nous voulions obtenir, disons ravin, souvenez-vous que les listes commencent à 0. Donc c'est 0 index un, index, deux index. On dirait cette liste. Des crochets durs à, et cela va imprimer le mot Gulley ou le nom Gully pour nous, juste comme ça. Maintenant, quand il s'agit d'assigner automatiquement des propriétés, nous pouvons le faire avec cette chose appelée une méthode de défenseur, une méthode de double soulignement. Nous allons en parler dans sa propre leçon. Nous pouvons également utiliser des fonctions comme propriétés, et cela devient un peu plus avancé. Nous allons en parler dans la prochaine leçon. Donc, dans cette leçon, ce que je voudrais que vous fassiez est de créer une classe, la donner aux propriétés. Et au lieu de simplement utiliser une chaîne ou un nombre ou une sorte de type de données simple. Utiliser un nouveau type de données ne sont pas un nouveau type, mais une structure de données plus complexe. Donc, le premier devrait être un dictionnaire et le second devrait être une liste. Et puis essayez d'accéder à cet enrôlement de dictionnaire depuis la classe. Maintenant, une chose amusante que nous pouvons faire parce que les langages de programmation nous avons ces choses appelées propriétés privées. Python n'a pas privé ou public. C' est juste un peu accessible. Donc, ce que nous pourrions aussi faire est d'imprimer animal dot cette liste. Et cela va simplement, au lieu de jeter la classe dans une variable, nous allons accéder à cette propriété par sa classe directement. Donc si nous allons de l'avant et que nous exécutions ça, nous verrons imprimer notre liste comme nous l'attendons. Donc, il n'y a pas de privé, il n'y a pas de public, Rien de tel. Je connais PHP et Java et tous ces autres langages l'ont. Python n'a pas ça. Oh, et encore une chose, en fait, je ne devrais pas oublier ça. Tu vas voir ça tout le temps. Chaque fois que vous voyez une propriété, commencez par un trait de soulignement comme celui-ci. C' est une propriété privée. C' est ainsi que nous nous en sortons en Python, au lieu de dire que cela va être privé, comme dans certaines langues, nous utilisons littéralement le mot privé. Nous commençons par un trait de soulignement. Et quand nous commençons par ce soulignement, nous disons simplement qu'il s'agit d'une propriété privée. N' y accédez pas depuis l'extérieur de la classe, alors n'y accédez pas de cette façon. Il ne devrait jamais être utilisé qu'en interne. Maintenant, nous ne savons pas encore comment les utiliser en interne. On va en apprendre davantage dans les prochaines leçons. Mais ce que j'aimerais que vous fassiez, c'est que vous donniez un coup de feu, essayez ça. Créez un dictionnaire de classe animale, une liste, une propriété privée, puis instanciez votre classe. Imprimez quelque chose à partir de votre dictionnaire ou de vos listes, puis essayez d'imprimer directement à partir de cet animal, cette classe d'animaux. Une des propriétés sans l'instancier et sans la jeter directement dans une variable. Il y a donc deux façons de le faire. Allez-y et donnez-lui un coup de feu. Essayez-le. S'il vous plaît Essayez-le. Ceci est important parce que lorsque vous entrez dans le monde de, par exemple, l'apprentissage automatique ou même juste le framework Web Django. Tu vas voir des cours partout. Il est important de savoir comment les classes fonctionnent en Python. Heureusement, ils sont assez faciles à apprendre. Donc, dans la leçon suivante, allons de l'avant et parlons des méthodes de classe. 4. Méthodes de classe OOP: Bonjour, bonjour, bonjour. Dans cette leçon, allons de l'avant et parlons des méthodes de classe. Méthodes de classe. Honnêtement, c'est juste un terme fantaisie pour une fonction à l'intérieur d'une classe. Et donc ça ressemble exactement à une fonction. n'y a qu'une différence distincte ici. Alors allons-y et débarrassons-nous de cette variable privée qui vient de la dernière leçon. Et créons une nouvelle méthode. Donc c'est une méthode. C' est tout ce qu'il y a et cela ressemble exactement à une fonction standard. Et tout ce qu'une méthode est, est une fonction à l'intérieur de la classe. Maintenant, une chose à noter ici est que sur une méthode standard à l'intérieur d'une classe, son premier paramètre est toujours self. Maintenant, si vous venez d'un fond JavaScript, vous allez voir ceci, ou PHP l'utilise aussi. En PHP utilise quelque chose comme ça. Je reçois alors un dollar signe ceci et puis une flèche. Javascript utilise le mot-clé this. En Python, nous utilisons le mot-clé self. Et ce que cela fait, c'est quand nous disons moi, nous pouvons maintenant imprimer auto point et nous avons accès à tout. Et vous pouvez voir le code VS est automatiquement rempli. Pour moi, nous avons point de soi. C' est une méthode, c'est une propriété, cette liste. Alors allons de l'avant et imprimons cette liste. Nous avons écrit une méthode ici. Maintenant, allons de l'avant et activez-le. Et pour l'activer ou pour l'exécuter. Nous allons instancier cette classe d'animaux parce que c'est une bonne pratique. Au lieu d'accéder à l'animal seul, nous le jetons dans une variable. Ensuite, nous disons l'anime hiboux point. Il s'agit de parenthèses de méthode. Et contrairement à une fonction où nous voyons un argument de mot-clé ou un argument positionnel requis ici comme moi, nous n'avons pas à le faire, nous pouvons simplement l'ignorer. Donc, même si soi est utilisé à l'intérieur de la classe, en dehors de la classe, nous l'ignorons complètement à 100% comme s'il n'existait pas. Et c'est juste dire parce que c'est un objet de classe à l'intérieur d'ici, il va avoir accès à tout ce qui est à l'intérieur de la classe. Et la raison pour laquelle nous faisons cela est que nous n'avons pas à constamment mettre de nouveaux arguments. Donc nous n'aurions pas à dire cette liste. Ceci est la propriété, et cetera, et cetera, et cetera. Nous n'avons pas à transmettre constamment ces choses parce qu'il faudrait mettre une liste ici. Et puis ce prochain sera un dictionnaire là déjà mis ici. Nous n'avons pas à les transmettre, donc je vais annuler cela et simplement exécuter, c'est une méthode. Imprimez moi, cette liste. Et encore une fois, le soi fait référence à l'animal. Cette liste propriété, classe, propriété. Allons de l'avant et exécutons cette leçon Python 301 trois méthodes de classe, et il l'imprime pour nous. Donc, avec le mot-clé self, nous avons accès à d'autres méthodes, d'autres propriétés, à toutes ces autres bonnes choses à l'intérieur de cette classe. Nous n'avons pas encore accès à d'autres classes. Ce n'est que cette classe particulière et c'est ce que soi fait référence. Self fait référence à la classe animale dans laquelle nous travaillons. Ensuite, nous pouvons également définir des propriétés en utilisant des méthodes. Et encore une fois, pour réduire cela en termes plus profanes, nous pouvons créer une variable de classe basée sur une fonction de classe. Allons de l'avant et créons une fonction ou une méthode appelée get. Golly. Il va prendre soi-même comme son premier paramètre, toujours le fait. Et nous pourrions revenir parce que c'est fondamentalement une fonction, self.age, cette liste. Et puis le ravin est le numéro deux, son indice à 012. Maintenant, quand on essaiera d'obtenir ça, on va devoir dire : «  Sois bien avec les parenthèses. Maintenant, si cela est censé agir comme une propriété au lieu d'une fonction, disons qu'il n'y a rien ici et qu'il est juste censé retourner un simple morceau de données. Nous pouvons utiliser une chose appelée un décorateur, dont nous parlerons aussi à l'avenir. Et on dit juste à la propriété. Et ce que cela va faire est de dire, toute sorte de logique ici, toute logique et cette méthode pourrait devenir énorme, bien que cela pourrait être un 100 lignes de code ici si nous le voulions. Ça va toujours mettre ça dans une propriété. Et quand c'est une propriété, nous abandonnons les parenthèses. Maintenant, parce que nous utilisons le mot-clé return comme une fonction, Cela ne va pas faire quoi que ce soit. C' est une méthode ici, est en fait l'impression. Dans ce cas, rendons cela un peu plus complexe. Utilisons une méthode comme une fonction régulière et réellement retourné quelque chose. Alors nous pouvons dire que le ravin est égal à l'animal, obtenir ravin. Et cela va nous permettre de l'utiliser plus tard afin que nous puissions imprimer. L' orteil le plus mignon de tous les temps est Golly. Allons de l'avant et lançons ça. Et nous allons voir que cela imprime différentes choses. Il va imprimer. C' est une méthode parce qu'elle exécute ce qui va imprimer. Et puis nous allons imprimer le plus mignon Gatto si tout le temps est en cuisine. Et regarde ça. Il imprime notre liste comme dans le premier exemple, dans le deuxième exemple et notre deuxième énoncé imprimé. C' est notre classe, c'est notre propriété. Et vous pouvez voir qu'il ressemble beaucoup à une fonction, mais il y a un décorateur dessus, disant fondamentalement, hey, même si c'est un objet exécutable, ou ce que nous appelons un appelable. Traitez-le comme si ce n'était pas un appelable, traité comme s'il s'agissait d'une propriété standard comme cette liste. Et c'est une propriété. Et parce que nous utilisons le mot-clé return, va pouvoir ensuite jeter cela dans une variable, n'importe quel nom de variable. Et puis nous pouvons utiliser cette variable en bas de la route. Maintenant, jetons un coup d'oeil à un autre exemple. Créons un exemple où nous ajoutons un nom à cette liste. Donc ici on peut dire la mort, parce qu'on va créer une méthode. Ajouter un nom. Il va toujours prendre soi-même et le nom va être le paramètre que nous allons ajouter. Ensuite, nous pouvons écrire auto point, ce point de liste ajoute ce nom. Et nous pouvons, si nous voulions retourner soit self.age, cette liste comme toute la nouvelle liste parce que tout ce que nous avons fait était de prendre une liste. Si vous oubliez le moi pendant juste une seconde, cela ressemble à une liste régulière, list.append. Cela arrive juste à y accéder depuis l'extérieur de la fonction ou de la méthode. Donc, nous avons des biens de classe. C' est une liste afin que nous puissions utiliser dot append dessus. Nous allons ajouter le nom ici. Et puis il va nous renvoyer cette liste. Et on va voir ça beaucoup. Alors allons de l'avant et commentons ce code. Et disons le point anti-malware. Et comment on l'appelait ? Nous l'avons appelé ajouter Nom et il prend un nom. Ignore moi. Soi y va toujours, mais nous l'ignorons. Ajouter Nom, puis le nom va être rhubarbe. Alors si nous le voulions, nous pourrions imprimer l'animal point sur cette liste. Et nous allons voir que cette liste contient maintenant Doo-Doo-Doo-Doo est venu Caleb Gully, et la rhubarbe. Et donc, nous ajoutons dynamiquement des choses à nos propriétés à l'aide d'une méthode. Allez-y et exécutez ça. Et ça dit Caïn, Caleb Gully, et rhubarbe comme prévu. Et encore une fois, tout ce que nous faisons ici, c'est que nous utilisons des types de données, types de données Python standard à l'intérieur d'une classe. Et donc nous sommes encapsulant ou, vous savez, pour faire bouillir ça parce que nous aimons nos grands mots en tant que développeurs, encapsuler les incitations, Pensez-y comme contenir. Donc tout ce que nous faisons est de contenir tout ce code dans une classe. Et l'idée ici est que nous regroupons des fonctions et des variables ou des méthodes et des propriétés. Nous les regroupons dans cette chose appelée un animal, cette classe appelée un animal. Et l'idée ici est que tous ces éléments sont liés d'une manière ou d'une autre. Donc, ce que j'aimerais que vous fassiez comme tâche pour cette leçon, c'est de créer un animal de classe. Créez une propriété, faites-en un tableau ou faites-en une liste, une liste Python. Ensuite, écrivez une méthode pour ne pas ajouter quelque chose mais pour supprimer quelque chose de cette liste. Donc, au lieu d'ajouter, il pourrait être appelé remove name. N' oubliez pas de prendre vous-même comme premier paramètre un 100% du temps qu'il enlève toujours. A l'intérieur de cela, une méthode particulière, nous pouvons alors accéder à self dot, quelle que soit votre liste est appelée, point remove, puis le nom. Et puis ici, nous pouvons dire, eh bien, nous l'avons instancié. C' est notre classe, c'est notre nom de méthode. Donc, le vôtre serait appelé supprimer le nom, puis le nom à supprimer. Et puis vous pouvez imprimer à nouveau cette liste entière et voir qu'elle a effectivement été supprimée. Dans la leçon suivante, allons de l'avant et nettoyons ça. Donc, cela semble un peu plus de jambe, un exemple du monde réel parce qu'en ce moment, c'est du code désordonné et c'est juste du code tutoriel. Ce n'est pas bon. Créons un exemple réel d'une classe animale dans la prochaine leçon. 5. Nettoyer le cours OOP: J' écris, en partant de cette dernière leçon, ce que nous allons faire est de nettoyer un peu cela et de créer peu d'une véritable instance animale, ou parfois nous appelons l'instance de classe parce que c'est une instance d'une classe. Et nous allons essentiellement nous débarrasser de tout ça et nous allons créer une classe d'animaux appropriée. Alors quel genre de choses n'a pas d'animal ? Un animal a une couleur de fourrure. Et disons que pour une couleur va être orange, alors un animal a également des actions qu'il peut prendre. Quel genre d'action ne peut pas prendre ça pourrait déf, manger, ça pourrait faire quelque chose. Et souviens-toi, on s'est toujours mis ici. On pourrait aussi faire Chase sourd parce qu'il va chasser sa nourriture. Disons que c'est comme un tigre ou un cheeto. Et cela va aussi prendre soi-même comme premier paramètre. Ensuite, nous instancions cette classe, appelons ce tigre est égal à et animal. Et puis on pourra faire ce tigre. On peut faire un IIT. On pourrait le faire Chase, on pourrait imprimer sa couleur de fourrure ou on peut le faire, va le faire. Def parler. Ça va prendre soi-même et ça va simplement imprimer rar, rar, animal dot speak. Et donc quand nous lançons ceci, quand nous exécutons la leçon Python pour le nettoyage de classe, il va imprimer rar, tout comme nous l'attendons maintenant, ce n'est rien que nous n'avons pas déjà couvert. Et si vous entrez juste dans Python 301 et que vous êtes un peu nouveau en Python et que vous vous demandez ce que cela passe. Cela signifie simplement ne rien faire d'autre que d'autoriser l'indentation. Parce que si nous n'avons pas cette passe ici, allons voir quel genre d'erreur d'indentation nous allons avoir. Nous obtenons une erreur d'indentation attendue un bloc indenté après Chase sourd. En fait, il le cherche ici, faisant de son mieux pour savoir où il est. Mais nous avons simplement mis passe là dedans. Maintenant, c'est une classe très générique et il n'y a honnêtement rien de super utile à ce sujet. Mais dans la prochaine leçon, nous parlerons de l'héritage de classe. y a donc pas de tâche pour cette leçon. Je voulais juste te montrer que je vais nettoyer un peu ça. Dans la leçon suivante, nous allons étendre cette classe d'animaux et nous allons créer, disons, un vrai tigre ou un autre type d'animal. Et puis nous pouvons écraser la méthode speak, la méthode de chasse de la méthode. On pourrait y ajouter toutes sortes de choses. Donc, quand vous aurez fini de me regarder nettoyer ce code, passons à la leçon suivante où nous parlons de l'héritage de classe. 6. Hérité du cours OOP: C' est l'héritage. Donc, l'une des choses vraiment belles derrière Python, ou je suppose vraiment n'importe quelle classe dans n'importe quelle langue, il n'a pas besoin d'être python. Mais la bonne chose à propos d'une classe, c'est qu'on peut l'étendre. Et donc au lieu de simplement dire animal de classe et ensuite avoir une autre classe appelée tigre et une autre classe appelée chat maison. Nous pourrions, au lieu d'avoir à évaluer, parler, manger chasser pour une couleur encore et encore et encore, nous pouvons simplement l'étendre. Et donc ce que je vais faire ici, c'est me débarrasser de ça et créer une nouvelle classe. Et celui-là s'appellera tigre. Et entre parenthèses, ça va étendre l'animal. Et je peux passer ici pour ne rien faire. Et c'est automatiquement parce que ça prolonge cette classe d'animaux ici. Il va automatiquement obtenir la couleur de la fourrure, méthode de parole, la méthode de manger et la méthode de chasse. Donc, ce que je peux faire est maintenant écrire tigre est égal à une classe de tigre. Tigre doublespeak, et au lieu d'écrire, animal est égal à une classe animale ou des tigres égale à une classe animale. On peut maintenant dire que le tigre est égal à une classe de tigre et que le tigre parle. Alors exécutons ce code et voyons ce qui se passe ici. Courez moins de cinq. Et ça dit « rawr ». Maintenant, juste pour le plaisir, allons de l'avant et imprimer ceci. Voyons quel genre de type c'est. Type d'impression, tigre. Et ça va dire rar, mais ça va aussi dire tigre principal. C' est différent de l'animal. Si on échange ça contre un animal, on va voir ça nous en tant que RAR ou l'animal principal de classe. Et donc on échange ça. Maintenant, ce qui est sympa, c'est qu'on peut tout écraser ici. Donc, au lieu de dire « Parlez brut » ou nous pouvons dire autre chose. Sourd, parle, ça prend soi-même. Et quel est ce tigre que nous allions dire, il a grandi à droite ? Comme Tony le Tigre et attrape-le. Ok. Peut-être pas la meilleure blague que j'ai jamais faite. Mais allons-y et lançons ça et nous allons voir qu'en fait, nous allons nous débarrasser de cette ligne. On n'a plus besoin de ça. Quand nous lançons ça, ça ne va plus dire rar parce que nous instancions la classe Tiger. Il a parlé. C' est l'héritage de la classe. Il a aussi parlé. Lequel va courir. Eh bien, parce qu'on instancie la classe Tiger et qu'on écrase parler, ça va tourner celui-là. Donc, ça va dire leur taux comme prévu. Allons de l'avant et créons un exemple de plus et créons une classe de chat maison. Il va aussi s'étendre à partir d'un animal. Et quand on parle trop, on va le faire dire. Et c'est tout ce qu'on va faire là-bas. Et au lieu de parler tigre, tigre, nous pouvons toujours garder ça instancié si nous le voulions. Il ne fait rien pour que nous puissions réellement le supprimer par. allons vous montrer un exemple où nous avons à la fois un cours de tigre et un cours de chat domestique. Donc, nous pouvons maintenant écrire chat est égal à chat maison, chat point parler. Et écrivons aussi tigre, doublespeak. Et l'un va dire qu'ils sont géniaux et l'autre va me sauver. Et allons de l'avant et lançons ça. Et c'est la règle et miaou. Maintenant, à ce stade, vous pensez probablement, eh bien, ce n'est pas bon. Je veux dire, je pourrais aussi bien écrire un cours de chat domestique régulier et ne pas étendre de animal si je remplace la seule chose que j'utilise de toute façon, si c'est ce que tu penses. Oui. Tu as absolument raison. Allons de l'avant et regardons cela pour la couleur cependant. Imprimons le point de chat pour la couleur. Et on va voir que c'est orange. Ils sont super miaou, et ça dit orange. Mais nous pouvons écraser ça. On peut dire que la couleur de la fourrure est égale au noir. Sauvegardons ça et réexécutons ça. Et ça va dire noir. Et donc par défaut, il a hérité de l'orange comme couleur de fourrure juste par défaut. Donc c'est un peu comme un plan. Et puis nous avons changé ça pour qu'une couleur pour ce chat de maison soit noire. Maintenant, essentiellement ce que nous faisons ici, c'est que nous créons une sorte de plan avec cette classe, et cela s'appelle une interface. Dans la leçon suivante, nous allons parler des interfaces et de ce qu'elles sont, de la façon dont nous les mettons en œuvre et de la raison pour laquelle nous les écrivons. Mais pour l'instant, ce que j'aimerais que vous fassiez, c'est créer une classe appelée animal. Vous en avez peut-être déjà un. Et puis je veux que vous étendiez cette classe. Je veux que tu hérites de ce cours. En écrivant votre nouveau nom de classe. Étendre l'animal en mettant les animaux entre parenthèses ici. Et puis vous pouvez l'écraser des attributs ou de ses propriétés. Vous pouvez également remplacer ses méthodes. Et puis je veux que tu instancies ce chat domestique ou n'importe quel animal que tu choisies d'utiliser. Et puis quelle que soit la méthode que vous avez choisie pour écraser si son parler, manger, peut-être quelque chose de tout nouveau. Peut-être que c'est quelque chose qui est en dehors de ce que vous avez vu dans ce module jusqu'à présent. Je veux que vous l'exécutiez. Le point de chat parle. Il va m'imprimer. Et puis je veux que vous le fassiez, comme vous avez écrasé une de vos propriétés ici, je devrai également imprimer cette propriété. Et donc ici, je viens juste d'imprimer pas pour la couleur. Et encore une fois, il est vraiment, vraiment important que vous appreniez comment les cours fonctionnent. Parce que dans les frameworks tels que le framework Web Django, nous allons utiliser beaucoup de classes. Et il est important de savoir que même si vous ne saviez pas quel animal Hamlet a la fermeture à glissière là-haut. Juste effondré ça, disons même que vous ne savez pas ce qu'il y a à l'intérieur de l'animal. Vous seriez en mesure d'écraser en quelque sorte ce qui est à l'intérieur de l'animal. Toi, tu serais capable d'explorer et de comprendre, oh, un animal a une couleur de fourrure, mais je veux écraser ça. Il a une méthode de parole. D' accord ? Ouais, ouais, il a une méthode de parole par défaut, mais je veux l'écraser aussi. Donc, quand vous avez terminé cela, passons à la leçon suivante où nous parlons des interfaces de classe. 7. Interfaces du classe OOP: Prenons une conversation autour de ce qu'est une interface. Donc, essentiellement, si vous vouliez le faire bouillir, une interface de classe est littéralement juste un plan. Et tout ce que ça veut dire, c'est qu'il va y avoir une sorte de propriété. va y avoir une sorte de méthodes ou juste une méthode et c'est simplement supposé implémenter quelque chose. Et dans la dernière leçon, nous avons créé un tigre et un chat de maison. Allons-y et supprimez-les juste une seconde. Nous allons en créer de nouveaux. Et nous allons travailler avec cet animal. Et généralement quand vous voyez une interface, vous allez voir qu'il y a une sorte de méthode et cela va juste passer. Ou vous allez voir quelque chose comme soulever, pas d'erreur implémentée. Et donnons à ceci un meilleur exemple ici. Allons l'animal, faisons la classe. Maison chat va étendre la classe des animaux et simplement passer. C' est alors instancier ce chat de la maison. Donc, nous pouvons dire chat maison est égal à hôte Kat ou chat est égal à chat maison. Et puis on pourrait faire un point de chat. Et lequel avons-nous écrasé ici ? Eh bien, nous n'avons rien écrasé, mais nous savons qu'il va hériter automatiquement du discours de la classe Animal. Alors, allons-y et parlons. Et lançons ce fichier. C' est la leçon six interfaces de classe, et il dit non implémenté. Maintenant, l'idée ici est que vous avez simplement un plan et c'est quand vous l'utilisez. Tu es censé implémenter ça. Si vous voulez l'utiliser, vous devez l'implémenter. Et donc pour se débarrasser de cette erreur non implémentée ou si elle est juste en train de passer ne retourne aucun. On pourrait simplement dire « Def Parler ». Il va se prendre comme son seul et unique paramètre, paramètre obligatoire à l'intérieur d'une classe. Imprimé, miaou. Et donc ce que ça fait ici, c'est que ça dit, hé, chat domestique va utiliser l'interface des animaux ou ce plan. Si nous essayons de bien utiliser parler, il n'y a rien mis en œuvre, donc nous devons le mettre en œuvre. Et parce que nous avons étendu animal, nous avons écrasé parler pour que cela ne fonctionne plus. Donc tu peux y penser comme ça. On prend ces deux lignes et ça ressemble beaucoup à ça. Boom, on l'a simplement remplacé. Mais l'interface ou le plan est simplement destiné à nous dire qu'il est censé être mis en œuvre. Donc, lorsque nous sauvegardons ceci et réexécutons ceci, nous n'obtiendrons pas une erreur non implémentée. Nous allons maintenant faire imprimer comme prévu. Et c'est donc à peu près le seul rôle d'une interface. Et les interfaces est un plan qui dit, hey, si vous voulez utiliser la méthode speak ou n'importe quelle méthode, vous devez l'implémenter vous-même. Mais juste pour que vous sachiez, chaque fois que vous étendrez de lui, chat maison aura toujours la méthode de parole et c'est notre travail en tant que développeurs de l'écraser. Maintenant, votre tâche pour cette leçon est de créer une interface. Donc, si vous avez déjà une classe d'animaux, si vous avez suivi avec Python 301, vous n'avez probablement pas déjà la classe d'animaux. Allez-y et au lieu d'utiliser parler, Allez-y et soulever une erreur non implémentée sur manger ou chase, ou une autre fonction ou méthode de votre choix. Étendez cette classe ou héritez de cette classe, créez-en une nouvelle. Je viens de créer un chat de la maison, puis écraser cette méthode. Vous l'avez peut-être déjà fait une fois auparavant. Ce n'est pas une mauvaise idée de le refaire. Cette fois, nous implémentons une interface avec une erreur non implémentée. Ensuite, nous allons parler de la super fonction. 8. OOP La super méthode: Donc, la plupart du temps, vous allez voir avec des classes que parce que nous pouvons étendre une classe, vous allez, vous allez pouvoir accéder à une fonction au-dessus. Alors pensez à cela comme ci-dessous et l'animal est au-dessus. Et donc si nous considérons cela comme une hiérarchie, c'est comme ça que j'aime y penser. Nous sommes tout simplement au-dessus de parler, ce que nous avons fait dans la dernière leçon. Mais si on le voulait, on pourrait exécuter tout ce qu'il y a ici. Donc, au lieu d'écraser parler, écraser manger. Donc, dans notre interface animale, allons de l'avant et imprimons. Je mange. Miam, miam, miam. Et parce que nous prolongeons le chat de la maison à partir d'animaux, nous pouvons maintenant instancier ce chat de la maison et nous pouvons dire manger. Et nous l'avons déjà fait quelques fois. Donc on ne verra rien de nouveau ici. Ça dit, je mange du miam, miam, miam. Et même si le chat de maison n'a pas de méthode dessus, les classes héritant de l'animal, il l'a. On a donc le droit de l'utiliser. Disons maintenant que nous voulions écraser la méthode eq, mais nous voulions aussi exécuter le code qui est ici. Faisons deux exemples ici. Def, mange toi, imprime. Je mange du saumon. Et quand nous réexécutons ce chat dot eat, eh bien nous avons remplacé la méthode d'interface de repas originale. Et donc tout ce qu'on va voir maintenant c'est que je mange du saumon. Mais que faire si, et si pour une raison quelconque nous voulions aussi exécuter cela ? Ce qu'on pourrait faire, c'est qu'on peut le faire gonfler. Alors rappelez-vous que c'est le bas, c'est le haut. Nous pouvons faire des bulles jusqu'à la classe des animaux et exécuter manger. Maintenant, il y a deux façons de le faire. Il y a la bonne et la mauvaise façon. La mauvaise façon est d'écrire animal dot manger. Parce que ce n'est pas encore instancié dans une variable ou quoi que ce soit de bon. Je veux dire, on peut y accéder techniquement, mais on ne devrait pas le faire de cette façon. Et puis la bonne façon est de simplement dire super. C' est un point de fonction manger. Et s'il y a une sorte de paramètres supplémentaires ici, nous faisons simplement correspondre les paramètres. Nous n'avons pas de paramètres, nous n'avons pas à passer en soi. C' est dans une classe qui sait déjà qu'elle est transmise automatiquement. Et donc ce que cela va dire est d'obtenir la classe qui est au-dessus, la classe Animal, c'est ce que super fait ici. Et puis exécutez la méthode de manger. Donc ça va avoir cette classe d'animaux que cette méthode de repas. Et puis ça va l'exécuter pour nous parce qu'on a dit manger avec parenthèse, non ? Ils sont exécutés. Ça va imprimer, je mange miam, miam, miam. Et puis il va imprimer, je mange Sammy, allons de l'avant et sauvegardons ça et essayons ça. Et on va voir que ça fait exactement ce que je décris ici. Je mange miam, miam, miam, miam, je mange du saumon. Et donc tout ce qui a fait à nouveau a été bouillonnant jusqu'à cette classe d'animaux. Exécuter dot eat. Tout ce qui est ici pourrait être une déclaration imprimée, pourrait être n'importe quoi. Il exécutera tout là-dedans. Et puis on a écrit tout ce qu'on voulait. Et encore une fois, cela pourrait être n'importe quelle logique que vous voulez écrire. Peu importe que ce soit une déclaration imprimée. Ça pourrait être des mathématiques, ça pourrait être un grattoir web. Ça pourrait être tout ce que tu veux. Maintenant, allons de l'avant et faisons un exemple de plus avec chase, mais ajoutons quelques mots-clés ici. Donc, dans notre classe d'animaux, nous avons la chasse sourde, moi. Et qu'est-ce qu'on va chasser ? On va chasser une gazelle. C' est ce qu'on veut chasser. Allons chasser et animal. Et ça va imprimer, je suis à la poursuite d'un animal. Et nous allons nous assurer que l'animal par défaut est une gazelle. J' espère que j'ai bien orthographié, peut-être pas. Et quand je vais ici, Cat ab.js va maintenant le faire, parce que nous ne l'avons pas encore implémenté par nous-mêmes. Ça vient de l'interface. Ça va dire que je suis à la poursuite de l'animal, qui se trouve être une gazelle par défaut. C' est aller de l'avant et courir ça. Et ça dit que je suis à la poursuite d'une gazelle. Maintenant, nous pouvons aussi passer un mot clé ici. Le chat pourrait chasser une souris. Allons de l'avant et lançons ça. Et ça dit que je suis à la poursuite de la souris. C' est drôle d'anglais, je suis à la poursuite d'une gazelle ou d'une souris ou quelque chose comme ça. Maintenant, pour mettre en œuvre Chase, nous pouvons faire, faire, faire, nous pouvons écrire def, chase, auto, animal. Ça va correspondre à ce qu'on voit ici. L' animal par défaut va être gazelle, mais nous allons toujours passer dans un animal, donc nous ne allons pas faire cet argument de mot-clé. On va dire « Super Dot Chase ». On va passer cet animal ici, quoi que ce soit. Donc ça va dire que je poursuis par défaut parce que je, mais peut-être que c'est l'animal qui chasse une souris. Je suis à la poursuite d'une souris. Et puis nous pourrions imprimer animal a été attrapé et nous pourrions utiliser des cordes f si nous le voulions, ou juste une déclaration d'impression régulière. Ça n'a pas vraiment d'importance à ce stade. Ce ne sont que des exemples. Allons de l'avant et lançons ça. Et ça va courir chat point Chase, qui est ici. Ça va être super jusqu'à celui-ci. Ça va dire que je poursuis un, quel que soit l'animal. Par défaut, c'est gazelle si elle n'est pas fournie. Et ici, nous disons que c'est nécessaire. Et puis on va le transmettre. Allons de l'avant et lançons ça. Et il manque un mot clé ici. Alors allons de l'avant et jetons la souris comme un mot-clé ici. Et pas un mot-clé, mais un argument positionnel requis. Allons de l'avant et continuons ça une fois de plus. Et ça dit que je suis à la poursuite d'une souris. La souris a été attrapé et donc les poursuites font maintenant tout ce que l'interface nous dit va faire. Nous avons ensuite bouillonné en utilisant la super méthode ou la super fonction. Nous avons dit, hé, partout où cela s'étend de n'importe quelle classe qui s'étend depuis États-Unis qui exécutent ensuite la méthode de chasse et nous avons simplement passé en animal. Donc les animaux font beaucoup de traversées ici. Nous passons aux animaux une ficelle ici. Il va ensuite entrer ici, puis entrer ici. Il va alors être écrasé ici. Donc, au lieu de gazelle va être Mouse et nous allons simplement l'imprimer. Donc, nous déplaçons un peu les données. Et c'est très commun en Python. C' est en fait commun dans toutes les langues basées sur les classes. Alors que tout se passe avant même qu'il arrive à imprimer animal a été attrapé et puis il imprime animal a été attrapé. Maintenant, c'est un peu un concept délicate pour envelopper votre tête autour. Donc, ce que je voudrais que vous fassiez est de créer une nouvelle classe d'interface que vous pouvez appeler animal juste, je voudrais que vous l'écriviez à partir de zéro. Tout comme une bonne pratique, tu sais. Donc, créez comme une interface animale, faites-le chasser quelque chose et il fait simplement une chose. Ensuite, prolonge cet animal. J' ai étendu mon pour être chat maison. Le tien pourrait être un tigre, un guépard, un éléphant. Ça n'a pas vraiment d'importance. Assurez-vous juste de l'étendre, écraser cette méthode Chase et utiliser cette super fonction dedans. Et rappelez-vous super simplement d'aller dire, oh, ok, ça s'étend d'un animal de classe. C' est notre interface qui est ici. Et puis ça va dire « Chase ». Donc, il parle maintenant de cet animal qui est super chase. C' est cette méthode ici. Il va ensuite imprimer, je suis à la poursuite d'un animal d'une sorte, puis exécuter du code en dessous. Nous utilisons simplement des instructions d'impression simples, mais vous pourriez réellement utiliser une logique Python appropriée si vous le souhaitez. Vous pouvez ajouter des nombres. Vous pouvez gratter un site web, vous pouvez faire à peu près n'importe quoi. Nous restons juste avec quelque chose de assez simple pour nos têtes enveloppent l'idée de la programmation orientée objet. Une fois que vous avez fait cela, passons à la leçon suivante où nous parlons des méthodes de défense. Et sous la méthode nous permet essentiellement de prendre des mesures automatiques. Et par exemple, notre animal a toujours une couleur de fourrure orange. Mais si on utilise un éléphant ? Eh bien, il faudrait écrire la première couleur ici. Je suppose que ça va être gris. Ou on va devoir prendre ce chat de la maison. Et nous allons dire chat, couleur de la fourrure est égale au gris. Et à ce stade, nous travaillons simplement avec des variables. Ce n'est pas une façon de vivre ta vie. On pourrait aussi bien le jeter ici quand il est instancié. On en parlera dans la prochaine leçon. 9. Méthodes dunder OOP: Parlons des méthodes du défenseur. Et donc ce que je dis ici, c'est d, u et d sont des squames et ce que cela signifie est un double soulignement. Et ce sont donc des méthodes magiques qui viennent avec la classe. Si vous êtes déjà familier avec les cours dans une autre langue, vous allez être familier, pour la plupart avec les méthodes de squames. Et nous sommes des méthodes magiques comme on les appelle dans d'autres langages de programmation. Revenons à notre animal ici, et créons une méthode de défenseur appelée init. Et cela commence avec le soulignement DEF, soulignement IN IT, le soulignement, le soulignement. C' est une méthode, donc il prend toujours lui-même comme premier paramètre. Et puis on pourrait lui donner n'importe quel autre paramètre. Et donc ça pourrait être pour la couleur. Et puis il peut faire quelque chose. Et ce que cela nous permet de faire est d'entrer du code ici, que nous étendons. Nous pouvons maintenant mettre une couleur de fourrure ici et laisser la couleur pourrait être grise, par exemple. Maintenant, actuellement cela ne va rien faire, mais si nous exécutons ce code, nous allons voir qu'il n'y aura pas d'erreur. Il n'y a pas d'erreur qui va apparaître. Ça va être sympa, cool. Ça fait exactement ce qu'on a fait dans la dernière leçon. Mais ce que nous disons maintenant, c'est que nous pouvons passer un argument positionnel requis. Allons de l'avant et lançons cela sans gris là-dedans, même si init accepte pour la couleur. Et nous voyons manquer un argument positionnel requis. Maintenant, revenons une seconde. Qu' est-ce qu'un tricot fait ici ? Init dit simplement lorsque vous instanciez cette classe, lorsque vous activez cette classe, même si elle est étendue ou héritée dans une autre classe, nous devons maintenant passer quelque chose et cela va être exécuté avant toute autre fonction. Et donc chaque fois que nous utilisons underscore, underscore init, ce que cela dit est de lancer une sorte de paramètre ou de paramètres ou d'arguments, et cela va s'exécuter automatiquement afin que nous n'ayons pas à taper chat underscore, underscore init, gris, quelque chose comme ça. Il va juste le faire automatiquement pour nous. Et on peut taper gris ici. Et allons-y et démontrons que cela va s'exécuter avant toutes nos autres fonctions. impression pour la couleur est pour la couleur du trait de soulignement. Et nous allons utiliser une chaîne F ici. Et il dit que pour la couleur est grise, puis il a exécuté, je suis à la poursuite d'une souris. Linda exécuté souris a été attrapé. Il y a donc un ordre d'opérations ici. Maintenant, init est de loin le plus commun que vous allez voir. Et cela signifie simplement que nous pouvons travailler avec pour la couleur. Maintenant par défaut que pour une couleur va être orange. Allons-y et débarrassons-nous de ça. Nous n'avons plus besoin de cela et nous pouvons simplement, parce que nous savons que cela va être exécuté en premier, nous pouvons simplement dire que le point auto pour la couleur est égal à pour la couleur. Et ce que cela nous permet de faire est d'utiliser self.view color dans toute autre méthode que nous voulons utiliser, ce soit dans la classe animale ou dans la classe héritée ou dans une classe étendue, il va automatiquement attribuer cela pour nous. Alors débarrassons-nous de cette déclaration imprimée. Et créons une autre méthode ici. Def obtenir pour la couleur auto. Et nous allons simplement imprimer autopoint pour la couleur. Maintenant, pour la plupart, vous pouvez ignorer tous ces éléments parce que nous ne les utiliserons pas dans cette vidéo. Ce que nous allons faire, c'est créer une classe. Jeter automatiquement dans la couleur de la fourrure va ensuite attribuer self.view couleur. Nous pouvons alors, une fois que nous instancions cette classe, nous pouvons faire cat dot get pour la couleur. C' est une méthode, donc elle prend des parenthèses. Et ce que cela va faire est parce qu'il n'y a pas de méthode get for color dans notre chat maison, mais il y en a un sur l'interface animale va exécuter ceci, et il va simplement exécuter quelle que soit la couleur que nous mettons ici. Et comme un meilleur exemple, écrivons ceci. Je cherche la couleur. Et ça va dire « trouver la couleur ». Gris. Dit obtenir un gris de couleur. Faisons orange ou ACH ou couru. Et ça va dire d'avoir une couleur orange. Et donc ce qui est bien à ce sujet, c'est maintenant que nous pouvons utiliser la super fonction. Donc nous pouvons dire def dedans sur notre classe étendue. Self pour la couleur super en raison de faire init. Et ça va prendre la première couleur aussi. Et donc ce que chaque fois qu'on instancie un chat domestique, comme on le fait ici, on va écraser cette fonction d'init, celle-ci ici. Mais au lieu de simplement le remplacer, nous voulions vraiment tout faire par défaut. Disons que nous étions satisfaits de cette logique. Nous ne voulons pas l'écraser, nous voulons simplement l'étendre. Nous allons donc permettre à self.view coloré d'être assigné. Et puis nous pouvons, si nous voulions imprimer quelque chose comme couleur de la fourrure a été sauvé dans l'objet de la classe. Et puis on pourrait faire autre chose ici si on le voulait. Mais tu vas voir ça beaucoup aussi. Dans Python de niveau professionnel, vous allez toujours voir et init ou pas toujours, mais beaucoup de fois vous allez voir un net et parfois vous allez nous voir écraser. Et donc nous l'écrasons ici et nous disons en fait, nous voulons le remplacer, mais nous voulons aussi utiliser la logique régulière qui vient avec, peu importe ce que cela peut être. Et puis on veut peut-être faire autre chose. Donc, disons que nous ne voulions pas nécessairement remplacer le type d'animal à chaque fois. On pourrait dire ici que le type d'animal est égal à inconnu. Et nous pourrions forcer ce type d'animal dans la maison chat auto âge type animal est égal à l'hôte Kat. Allons de l'avant et imprimer le type d'animal de point auto. Et donc à ce stade, nous utilisons maintenant init. Nous utilisons un Dundee où vous utilisez une déclaration d'impression super régulière. Nous avons vu qu'un trillion de fois forçaient ce type d'animal à ne pas être transmis en init. Il n'est pas là-dedans. Par défaut, c'est inconnu. Mais parce que c'est un chat de la maison, on veut coder ça en dur. On veut dire que le chat de la maison sera toujours le chat de la maison. Peu importe ce que nous faisons, il sera toujours hôte Got Il n'est pas modifiable. Et donc nous ne jetons pas le chat de la maison ici. Nous disons simplement un chat de maison instancié et il va y avoir un type animal de chat domestique là-dedans. Et il va l'imprimer et l'exécuter. Et il dit que la couleur a été enregistrée dans l'objet de classe. C'est juste ici. Il a couru super là-haut. Donc, nous le faisons, faisons, faisons, faisons. Nous savons que self.view color est accessible et nous avons accès à cela dans toutes nos méthodes. Ensuite, nous avons dit que le type d'animal est un chat domestique et imprimez ce type d'animal. Et donc la première déclaration d'impression, chat maison est la deuxième déclaration d'impression. Où est-il juste là, ça dit chat maison, et ça correspond ici mot pour mot, lettre pour lettre. Et puis on a la couleur de la fourrure et on dit qu'elle est orange. Et cela vient d'ici en raison de, en raison de ne obtenir pour la couleur. Et nous avons simplement mis cela pour la couleur dans un tricot. C' est en train d'être assez avancé. Python pour être honnête. Mais on le transmet ici en disant « self.age pour la couleur ». Et puis dans une méthode, nous accédons à self.view color. Maintenant, si vous regardez cette vidéo, grattez la tête, vous allez cool. Je ne comprends pas une seule chose qui vient d'être dit. Ce que j'aimerais que vous fassiez, c'est essayer ça. Je veux que vous essayiez cela jusqu'à ce que cela soit logique parce que vous allez le voir partout, surtout, en Python de niveau professionnel. C' est très important que nous comprenions à la fois les méthodes super et squames. Maintenant, dans cette leçon, nous parlons vraiment juste la méthode du dîner et de la méthode en net comme un résumé, signifie simplement exécuter ceci avant toutes les autres méthodes à l'intérieur de notre classe. On peut le remplacer. On peut utiliser super dessus. On peut faire tout ce qu'on veut. C' est un peu comme une méthode régulière, comme parler. Il arrive juste de s'exécuter d'abord automatiquement et ces paramètres sont jetés directement dans l'instanciation de classe. Et maintenant, cela ressemble beaucoup à une fonction avec un paramètre. La seule différence est qu'il s'agit d'une classe et cela sera automatiquement accessible dans tout le reste de notre classe. Je veux que tu essaies ça. S' il vous plaît passer au moins dix minutes à ce sujet et juste bricoler avec un pair, même si vous ne pouvez pas le faire fonctionner, c'est bon de passer ces dix minutes dessus. Et juste parce que la façon dont les cerveaux sont conçus, même si vous avez du mal avec ça, c'est bon. C' est une bonne pratique, peu importe. Allez-y et donnez un coup de feu pendant environ dix minutes. Si ça ne fonctionne pas dans une dizaine de minutes, n'hésitez pas à passer à autre chose. Vous aurez beaucoup de temps à l'avenir pour pratiquer en utilisant des méthodes de squames et super. 10. Erreurs et exceptions: Bienvenue de retour. Arrêtons de parler de cours. Pouvons-nous passer quelque chose comme huit leçons ensemble à parler de cours ? Et oui, ils sont importants en Python, ils sont extrêmement importants en Python, mais il y a une autre chose qui est extrêmement importante dans Python plus avancé, et c'est ainsi que nous pouvons gérer le flux d'erreurs. Donc on fait ça, on essaie une chose, sauf une autre chose. Et ce que cela fait simplement est de dire, essayez un bloc de code. Et s'il y a une erreur, faites autre chose. Donc, c'est beaucoup comme une déclaration if else. La seule différence est qu'il cherche des erreurs. Et alors jetons un coup d'oeil à un simple tri-accepter. Et donc la syntaxe ressemble à ceci. On va essayer un morceau de code. Et alors essayons. Le total est égal à un divisé par 0. Maintenant, si nous allons dans notre shell Python et nous en faisons un divisé par 0, nous allons voir cela nous donne une erreur de division 0. Vous ne pouvez pas diviser par 0. Mathématiquement, c'est juste un de ces rôles n'ont pas été autorisés à le faire. Donc, ce que nous pouvons faire maintenant, c'est accepter toute sorte d'exception. Et on peut dire que le total sera 0. Imprimez le total. Et c'est vraiment tout ce qu'il y a à essayer et sauf bloc en Python. La chose importante, dans, la chose importante ici est qu'il va essayer un morceau de code. S' il échoue, il soulève une sorte d'exception comme ce que nous voyons ici, une erreur de division 0. Il va alors sauter cette ligne de code et tout ce qui est en dessous. Cela ne s'exécutera pas simple car cela va alors sortir de ce bloc et ensuite essayer d'exécuter l'exception. Et donc quand nous lançons cette leçon Python 9, erreurs et exceptions, je n'ai pas orthographié les exceptions correctement, en passant, je dois corriger cela. Ça va m'embêter. Les exceptions sont mieux. Nous voyons le total ici est 0 et c'est parce qu'il obtient 0 ici. Et à titre d'exemple, faisons cela. Imprimer en essayant un divisé par 0. Déplaçons ça vers le haut. Et puis nous allons imprimer quelque chose en dessous. Cela n'apparaîtra pas. Et nous allons en imprimer un de plus ici. L' exception a été détectée. Allons-y et continuons encore une fois. Et il est dit d'essayer un divisé par 0. Cela n'apparaîtra pas, n'est pas apparue dans notre script ici. Et il dit que l'exception a été attrapé. Maintenant, à ce stade, vous devriez penser, oh, mon Dieu, où vais-je utiliser AS, j' espère que vous posez cette question et si vous posez ces questions, passons à un bon exemple ici. Que se passe-t-il si nous demandons à l'utilisateur d'entrer ? Demandez donc un numéro. On va dire entrée. Qu' est-ce qu'un nombre ? Alors nous allons nous assurer qu'il s'agit toujours d'un nombre. Donc nous allons dire que num est égal à, et nous allons le lancer comme un entier. Donc, peu importe ce que quelqu'un tape ici, ce sera toujours un nombre, ce sera un nombre complet. Et imprimons ça, imprimez num. Et quand nous exécutons ceci, quel est le numéro ? Écrivons dix. Et il n'en a que dix. Cool. Mais que se passe-t-il si quelqu'un n'écrit pas de numéro ? Eh bien, ça va toujours être stocké dans cette variable. Nous allons ensuite essayer de lancer ce nombre comme un entier. Et si ce n'est pas un entier ? Que faire si nous écrivons Python 301 ? Nous obtenons une erreur de valeur. Littéral non valide pour int avec la base dix. Fondamentalement, ce que cela signifie est qu'il ne peut pas transformer une chaîne en un nombre avec une base de dix. Mais le TL, DR, la courte histoire ici est que c'est tout simplement échoué. On n'a pas pu imprimer ça. On ne pouvait pas travailler avec ça. Alors, qu'est-ce qu'on fait ? Nous demandons un numéro. Nous essayons de lancer cela comme un entier. Si cela ne fonctionne pas, nous pouvons le faire sauf toutes les exceptions. Nous pouvons alors dire que ce chiffre sera inconnu et simplement l'imprimer. Et cela va nous permettre d'imprimer ce numéro, ce qu' il n'a pas fait avant, parce qu'il a erré et ça va dire inconnu. Alors essayons ça. Quel est le numéro ? Python 301. Et ça dit inconnu. Si nous l'exécutons à nouveau, compte tenu d'un nombre réel, il indique que le nombre est dix. Et ce que ça a fait, c'est que ça disait, oh, en fait, on ne peut pas gérer son erreur de valeur. Python ne sait tout simplement pas comment transformer une chaîne en un nombre correctement, d'une manière qui est prévisible pour vous, le programmeur. Et alors il jette une exception. Nous attrapons cette exception et nous écrasons num pour être inconnu, puis nous venons de l'imprimer. Maintenant, c'est un très bon cas d'utilisation parce que si vous essayez de faire quelque chose et que cela ne se passe pas comme vous l'attendez. Maintenant, ce que j'aimerais que vous fassiez, c'est essayer ça. Vous pouvez soit essayer avec le premier exemple. Celle-ci ici où nous avons essayé de diviser un par 0, ne fonctionne tout simplement pas. Ou vous pouvez essayer cet exemple, qui est celui que je préfère parce qu'il est plus proche d'être un exemple réel. Demandez des commentaires. Essayez de lancer ce nombre en tant qu'entier, attraper l'exception, écraser le nombre, puis l'imprimer. Et la prochaine chose à ce sujet est que nous entrons dans la gestion simple des erreurs et le flux d'erreurs. Et encore une fois, ce qui est important à ce sujet est dans notre premier exemple, si nous regardons ici, notre code est tout simplement mort. y avait aucun moyen de se remettre de ça. Et donc tout ce que nous faisons avec un essai, sauf IS attrape gracieusement cette erreur et la gère pour que notre script ne meurt pas afin que notre code puisse continuer à exécuter la façon dont il est censé s'exécuter. Vas-y et essaye ça. C' est un exemple assez simple. Donc ça ne devrait vous prendre que quelques minutes quand vous êtes prêt. Passez à la leçon suivante où nous parlons d'attraper de nouvelles exceptions. Nous allons attraper des exceptions particulières. 11. exceptions en captage: Parlons d'attraper des exceptions particulières et de déterminer quelle exception est lancée et comment nous pouvons gérer plusieurs exceptions. Donc, nous allons créer un exemple ici, et cela va juste être recréé à partir du dernier exemple. Nous allons dire qu'une sorte de nombre est égal à l'entrée, entrez un nombre. Ensuite, nous pouvons essayer de changer ce nombre en un nombre, car quand nous demandons une entrée, il revient toujours sous forme de chaîne. Et nous pouvons accepter cette exception en faisant tout ce que nous voulons. Et disons que ce chiffre sera inconnu. Et nous allons simplement imprimer le numéro quand nous en avons fini. Allons de l'avant et exécutons ce script. C' est moins de dix. Entrez un nombre, dix, imprime dix, entrez un nombre. Python. Il est dit que le nombre est inconnu. Dans le premier exemple, nous avons entré un nombre dix, il est revenu sous forme de chaîne. Et int a été capable de typecast ceci à un entier. Donc ça a parfaitement fonctionné. Dans le deuxième exemple, nous avons tapé Python. Essentiellement, c'est ce que nous avons fait. Maintenant, nous ne pouvons pas transformer un mot en entier, cela ne fonctionne pas. Python ne sait pas ce que Python, cette chaîne est opposée à se transformer en un nombre. Pas d'une manière prévisible de toute façon, donc il lève une exception. Maintenant, quand l'exception est levée, nous avons dit que ce nombre va être inconnu. Maintenant, comment pouvons-nous savoir ce qu'est cette exception ? Nous pouvons comprendre ce qu'est cette exception en tapant exception comme exception E. Print exception a été interceptée. Et puis nous pouvons imprimer le type d'E. Allons-y et recommencer. Et nous allons taper python comme notre numéro. Et il dit que l'exception a été attrapé classe valueError, et c'est inconnu. Donc, maintenant, ce que nous pouvons faire est que nous pouvons accepter spécifiquement une erreur de valeur. Donc, nous pouvons ajouter une autre exception ici sauf une erreur de valeur. Le numéro d'impression n'était pas un nombre valide. Et essayons ça. Cela a plusieurs exceptions ici. Donc, tapez Python a un nombre, et il dit Python n'était pas un nombre valide. Et puis il l'a imprimé ici. Python est ce que nous avons écrit. Impossible de le convertir en un nombre ou un entier. Ensuite, nous avons dit que quelle que soit cette valeur n'était pas un nombre valide. Maintenant, c'est beaucoup comme une déclaration if else, if, else if. Donc, il va essayer quelque chose comme une déclaration if. S' il attrape alors cette erreur particulière, il ne va pas exécuter d'autre exception ici. Il ne va exécuter qu'une exception particulière. Et maintenant, nous avons un moyen de faire face à une erreur de valeur spécifique. Et si on voulait faire quelque chose avec ce numéro ? Disons que num a été parfaitement accepté, abaisse le nombre dix, et ensuite nous voulions le diviser par un autre nombre. Donc, créons une deuxième entrée. On l'appellera num pour entrer un deuxième numéro. Et on va les diviser. Alors on va dire que num deux est égal à int num deux. Et le total sera NUM divisé par m2. Maintenant, si num1 et num2 peuvent tous les deux être convertis en un entier. Total va courir. Cependant, si l'un d'entre eux ne peut pas être converti en entier, il va alors lancer une erreur de valeur. Nous allons ensuite attraper cette erreur de valeur avec une exception et imprimer n'importe quel nombre n'était pas un nombre valide. Et en fait, il pourrait ne pas être engourdi. Ça pourrait être engourdi. Donc, disons engourdi ou engourdi à n'étaient pas des nombres valides. Et essayons ça. Entrez un nombre. Faisons 100. Et ton deuxième numéro, dix. D' accord ? Pas d'erreurs. C'est une bonne nouvelle. Que faire si nous faisions le premier nombre à 100 et le second à 0. Eh bien, dans la dernière leçon, nous avons essayé de diviser par 0. On ne peut pas faire ça. Et donc nous pouvons voir que l'exception a été attrapé. Il n'a pas exécuté d'erreur de valeur car aucune erreur de valeur n'a été émise sur nous. Donc nous ne pouvons pas attraper cette erreur. Mais il y avait une autre erreur ou une autre exception qui a été jeté sur nous que nous pouvons alors sauf alors il imprime exception a été attrapé. Imprimez le type de l'exception. Et on a travaillé avec un numéro, ce qu'on n'a plus besoin de faire. On voudra peut-être travailler avec des totaux à la place. Et je ne sais pas. Maintenant, quand il imprime Type II, il dit classe ZeroDivisionError. Ce que nous pouvons faire, c'est l'attraper tout seul. Nous pouvons dire sauf 0, erreur de division, numéros d' impression ne pouvaient pas être divisés div que j'ai fait. Et débarrassons-nous de ça. Essayons encore ça. Entrez un nombre dix et son deuxième chiffre 0, et il indique que les nombres ne peuvent pas être divisés. Aucune erreur de valeur n'est levée cette fois. Cela signifie que les deux ont été capables de, ces deux nombres, num1 et num2 ont tous les deux été convertis en entiers parfaitement bien. Donc, il n'y avait pas d'erreur de valeur à attraper. Donc, il a sauté dessus. Mais alors il a dit total est égal à un engourdi divisé par num2, dix divisé par 0. Eh bien, vous pouvez diviser n'importe quoi par 0, nous obtenons une erreur de division 0. Donc, nous avons dit, ok, essayez d'attraper une erreur de valeur si elle existe, si ce n'est pas le cas, essayons d'attraper la ZeroDivisionError. Nous avons ensuite attrapé cette ZeroDivisionError et imprimé autre chose. Et parce que celui-ci a été exécuté, l'exception générique en bas n'a pas été exécutée, ce code a simplement été ignoré. Donc Python va choisir l'une de ces exceptions , celle qui est la bonne. Et il va exécuter une de ces avenues de code. Il essayera toujours, toujours, toujours, d'exécuter ce code. Et s'il y a des erreurs, il va vérifier si c'était une erreur de valeur. Vérifiez si c'était une vérification d'erreur de division 0 pour voir si c'était une exception générale générale d'une sorte que nous n'attrapons pas explicitement. Et donc, à ce stade, nous attrapons maintenant une erreur de valeur, 0 erreur de division. Ou s'il y a une sorte d'autre air que nous ne connaissons pas, nous pouvons alors travailler avec ça. Maintenant, je dis essayer et attraper parce que je viens d'autres langages de programmation aussi. En Python, nous disons essayer sauf que c'est exactement la même chose, juste un mot-clé différent. Et vous allez voir essayer sauf partout dans le Python professionnel. Et la raison en est encore une fois parce que nous voulons essayer quelque chose. Et s'il y a une erreur, si nous n'essayons pas d'accepter cette erreur, notre code va simplement mourir. On ne veut pas que ça arrive. Nous voulons qu'il continue à s'exécuter, nous voulons qu'il continue, continue. Et donc nous attrapons gracieusement chacune de ces erreurs, ou nous attrapons globalement chaque erreur, chaque exception, et travaillons avec elle. Et cela signifie juste que notre code peut continuer à fonctionner. Ça ne va pas nous tromper. Et cela signifie que tout notre code ici va toujours s'exécuter. Et c'est une bonne nouvelle. Parce que si vous construisez un programme comme le Web scraping bot de Google, et qu'il arrive à un site Web et qu'il essaie de gratter une adresse e-mail particulière et de vérifier l'adresse e-mail. Et peut-être que cette adresse e-mail n'existe pas réellement. Comme ça, c'est passé. Nous pensions que ce n'était pas une adresse e-mail, mais ce n'est pas une vraie adresse e-mail. Eh bien, si Google Boston n'a pas attrapé cette erreur, il mourrait tout simplement et quelqu'un devrait aller le redémarrer. Et vous auriez quelqu'un à Google tout le temps juste taper Python scrape internet, Python scrape internet, Python scrape internet, Python Stream Internet. Et notre travail en tant que programmeurs est de si nous pouvons nous automatiser hors d'un travail. Et donc il va alors peut-être essayer d'obtenir une adresse e-mail ou un autre site Web. Il va alors essayer de faire quelque chose. Et si ce n'est pas le cas, peut-être qu'il le saute. Peut-être qu'il essaie un morceau de code différent. Peut-être qu'il essaie de faire autre chose. Et puis nous n'avons pas quelqu'un à l'autre bout d'un ordinateur tapant Python. Gratter Internet dot py, Python gratter Internet dot py, Python gratter Internet dot py. À chaque fois en Arizona, il va juste automatiquement le gérer pour eux. Et c'est le pouvoir derrière essayer et sauf que vous pouvez accepter toute sorte d'erreur. Ceux-ci sont juste des erreurs de mots-clés lancées exactement à partir de Python. Nous pouvons aussi créer le nôtre si nous le voulions. Et puis nous pouvons gérer gracieusement une erreur. Et cela signifie que notre code fonctionnera pour toujours sans aucun problème. Maintenant, ce que je veux que vous fassiez, je veux que vous essayiez ceci, écriviez une sorte d'exemple, et vous pouvez voler mon exemple si vous voulez, où vous essayez du code et vous sauf une erreur, un type d'erreur spécifique. Ensuite, vous acceptez un autre type d'erreur. Et puis vous acceptez juste un domaine général. Même Assurez-vous d'imprimer le type E afin que vous puissiez faire face à cela plus tard. Allez-y et écrivez ce tri complexe à l'exception du bloc, et quand vous êtes prêt, passons à la prochaine leçon. Bonne chance, et je te verrai là-bas. 12. Quels sont les décorateurs et comment en créer une: Parlons des décorateurs. Maintenant, si nous revenons à une leçon particulière, c'est l'une de ces méthodes. Oui, on peut avoir ce truc qui s'appelle un décorateur. Et un décorateur est simplement une fonction qui enveloppe une autre fonction. Et dans cette leçon, nous allons créer notre propre décorateur Python. Alors sortons de cela et créons un nouveau fichier Python. On l'appellera moins de 11 ans. Déco lire les tours de ce couloir. Donc, en général, nous avons une sorte de fonction, MyFunc. Et cela va simplement imprimer mon nom est Caleb. Alors on peut exécuter myfunc comme ça. C' est Python, des trucs one-to-one juste ici. Cool. Cela fonctionne très fade, très ennuyeux. Ce n'est pas dans une classe. Ce n'est pas dans un essai. Attrapez-nous ne fait rien de nouveau. Mais disons que nous voulions écrire un décorateur qui ressemble typiquement à ceci. Deck ou un Tor a le symbole at, puis le nom d'une fonction. Et tout ce qui va faire est d'exécuter une fonction appelée décorateur et de jeter cette fonction à l'intérieur de celui-ci afin que nous puissions exécuter quelque chose avant ou après automatiquement. Alors allons de l'avant et créons un décorateur. Et pour que nous puissions créer mon décorateur. Et cela va prendre une fonction tout comme myfunc. Myfunc va être jeté là comme une fonction entière, pas comme une variable, mais a une fonction. Donc, nous passons des fonctions en fonctions à ce stade. Ensuite, nous pouvons créer une sorte de wrapper et nous voyons généralement le mot rapper. C' est très, très commun. Imprimez. Fais quelque chose ici. Ensuite, nous pouvons exécuter cette fonction, quoi que ce soit, imprimer la fonction originale est terminée. Et retournons simplement le rappeur. Et c'est donc une fonction à l'intérieur d'une fonction. Nous avons réellement vu cela, je pense que c'était dans Python 201, où nous pouvons mettre une fonction à l'intérieur d'une fonction. Et c'était essentiellement un décorateur à ce moment-là. Et donc ce que nous disons ici, c'est que mon décorateur va prendre une fonction comme son seul paramètre. Il va alors enregistrer une nouvelle fonction appelée rappeur va faire une chose, exécuter cette fonction originale. Nous parlons de portée bizarre à ce stade en JavaScript, c'est ce qu'on appelle une fermeture. Exécutez ladite fonction, quelle que soit cette fonction, puis imprimez une autre instruction. Enfin, nous retournons le wrapper. Donc maintenant, il y a deux façons de décorer une fonction. Allons-y et débarrassez-vous de cela ici parce que nous savons que MyFunc va simplement imprimer mon nom est Caleb. Nous pourrions appeler cette nouvelle fonction est égale à mon décorateur. Et parce qu'il faut une fonction, on va lancer MyFunc. Maintenant, notez que nous n'avons pas les parenthèses ici. Nous n'exécutons pas MyFunc où simplement le lancer comme une fonction par elle-même, pas comme une fonction exécutée, tout comme l'objet de fonction. Ensuite, nous pouvons dire new func, exécuter ceci comme sa propre fonction. Allons de l'avant et essayons ça. Et il est dit de faire quelque chose ici. Mon nom est Caleb, la fonction originale est terminée. Et vraiment c'est tout ce qu'il y a à un décorateur. Maintenant, allons de l'avant et faisons cela d'une manière plus pythonique et sans fil plus moderne. Coupez ça et déplacons-le en haut. Et décorons myfunc avec mon décorateur. Et parce que nous utilisons ce genre de syntaxe, nous n'avons plus besoin d'envelopper cela ici. On peut simplement écrire mon func. Allons-y et débarrassons-nous de ça. Et tapons myfunc. Myfunc, ma fonction est décorée de mon décorateur. Ça va passer ça automatiquement. Cela va enregistrer wrapper, imprimer une chose, faire une chose, imprimer la fonction d'origine est terminée. Retourne ce wrapper. Allons de l'avant et économisons, et faisons ça. Et cela fonctionne de la même façon maintenant c'est très Pythonique. J' aimerais mieux que ça. Vous allez voir de cette façon probablement plus souvent qu'autrement. Et tout cela est, est exactement le même que cette première fonction. Pas la fonction, mais le premier exemple. Et tout ce que nous disons, c'est d'utiliser le symbole à ici comme décorateur. Enveloppez mon décorateur autour de ma fonction. Donc ça va exécuter mon décorateur quelque part à l'intérieur de là. Il va exécuter la fonction d'origine. Et puis nous pouvons faire quelque chose avant ou après ou rien si nous ne voulons pas, nous ne pouvons littéralement rien faire. Je veux dire, ce serait inutile de la part de décorateur de ne rien faire. Mais nous pourrions faire quelque chose avant et après, ce qui nous rend vraiment, vraiment puissants. Pourquoi on ferait ça ? Eh bien, parce que parfois nous avons une fonction et nous aimons simplement ce qu'elle fait. Et nous voulons simplement ajouter un peu de logique supplémentaire, un peu de fonctionnalité supplémentaire. Et donc nous ne voulons pas toujours changer notre fonction d'origine, mais peut-être que nous voulons prendre cette fonction originale et l'étendre. Donc, c'est un peu comme l'héritage de classe, où nous avons pris une classe régulière, puis nous l'avons hérité dans une nouvelle classe ou l'avons étendue dans une nouvelle classe. C' est prendre une fonction et l'étendre avec mon décorateur. Maintenant, c'est un décorateur très, très, très simple, mais il fait passer l'exemple. Donc, ce que j'aimerais que vous fassiez, c'est que je veux que vous créiez un décorateur et que vous l'utilisiez de cette façon. Ne l'utilisez pas de la manière basée sur la fonction, la manière originale que vous allez voir de temps en temps. Mais c'est la façon la plus pythonique. Donc, créez une fonction, appelez-la mon décorateur. Son seul argument va être la fonction elle-même, pas la fonction exécutable, juste le nom de la fonction. Et donc fondamentalement, nous avons réaffecté un nom de fonction en tant que variable ici. A l'intérieur de cela, vous allez devoir enregistrer une fonction nother. Faites une chose, exécutez cette fonction originale, faites une seconde chose et renvoyez cette fonction interne. Donc, nous avons des fonctions à l'intérieur des fonctions. Vous voulez retourner cette fonction interne, puis créer une autre fonction, juste une fonction normale. Il pourrait s'agir d'une déclaration imprimée, il pourrait avoir une logique réelle. Je pourrais faire tout ce que tu veux et le décorer avec mon décorateur. Ça veut dire que c'est un décorateur. Mon évaluateur déco correspond simplement au nom de la fonction décoratrice. Allez-y et exécutez myfunc avec et sans le décorateur. Par exemple, si je me débarrasse de ce décorateur et exécute ceci, il imprime une ligne. Si je remets ce décorateur et relance ça, il imprime trois lignes. Je veux que tu y ailles et que tu lui donnes une chance. Ce n'est pas trop souvent que vous allez réellement créer vos propres décorateurs. Vous allez plus ou moins les utiliser. Mais même la possibilité que vous entrez dans comme open source ou Python vraiment avancé, alors vous allez créer vos propres décorateurs. Et il est vraiment important de savoir comment cela fonctionne et l'ordre dans lequel les choses se produisent. Par exemple, nous avons quelque chose qui se passe avant notre fonction, après notre fonction. Vas-y et essaye-le et quand tu seras prêt, passons à notre prochaine leçon. 13. Quels sont les générateurs et comment en créer un: Bienvenue de retour. Parlons des générateurs. Donc, un générateur est, est vraiment, concept vraiment intéressant. Ainsi, par exemple, si vous avez une liste, donc LST est égal à 123123 vont être stockés en mémoire à tout moment. Maintenant, disons que cette liste contient 10 millions de numéros, ce qui, si vous entrez dans la science des données, pourrait avoir 10 millions de numéros dedans et vous ne voulez pas stocker tout cela en mémoire parce que vous devez faire monter la RAM sur votre ordinateur. Et votre ordinateur en aura besoin, en gros, votre ordinateur va devenir très cher si vous jetez du matériel dessus. Un générateur est une façon logicielle de dire faire quelque chose avec le premier numéro, puis faire quelque chose avec le deuxième numéro, puis faire quelque chose avec le troisième numéro, et il ne se soucie pas de ce qui est venu avant ou après. Maintenant, un générateur est généralement mis dans une sorte de fonction. Donc, nous pourrions dire def myfunc pour une sorte de nombre dans une gamme, plages déjà un générateur en Python trois. Donc, 14, par exemple, imprimer num. Et quand nous exécutons myfunc, Python Leçon 12, Cela ne va rien faire parce que c'est dans la fonction. Essayons encore une fois. On y va. Il est écrit 012345678910111213. D'accord. Pas mal. Tu sais, on ne travaille qu'avec 14 numéros. Ce n'est pas techniquement un générateur. Mais disons que nous voulions faire quelque chose de grand, comme faire en sorte que cela retourne toujours tous ces chiffres à l'exposant de lui-même. Donc, nous ferions engourdi à l'exposant de num. Ainsi, par exemple, dix à la puissance 1013 à la puissance de 13. Et au lieu du retour, qui ne va s'exécuter qu'une seule fois, essayons ceci. Ça ne va pas marcher. Faisons total est égal à myFunc, puis imprimez le total. S' affiche avec un seul numéro. Et si on voulait plusieurs numéros ? Et si on travaillait avec de très gros chiffres ? L' un d'eux a dit que nous pourrions utiliser le mot-clé « yield ». Et ce que le rendement va faire, c'est qu'il va dire que cette fonction n'est plus seulement une fonction frappe un générateur, va parcourir chaque nombre de 0 à 13 et va produire quel que soit ce nombre. Deux l'exposant de lui-même. Maintenant, allons de l'avant et imprimons ceci. Et on voit quand on imprime mon func, c'est un générateur. Maintenant encore une fois, rappelez-vous que le générateur ne va fonctionner qu'un seul nombre à la fois. Donc, dans notre premier exemple où il s'agissait juste d'une liste, il connaît les nombres 0 à 13. Et d'une manière technique, nous pouvons accéder à ces numéros. Mais si on travaille avec de très gros chiffres, on ne veut pas ça. Ou si nous travaillons avec des ensembles de données très volumineuses, nous voulons utiliser un générateur. Donc, il ne s'agit que de la tâche à accomplir. Il ne s'agit pas de quoi que ce soit qui est venu avant ou qui vient après. Et donc l'idée ici est que vous êtes, vous êtes en train d'écrire du code, c'est la performance de la mémoire. Donc, s'il fait 14 à la puissance de 14, il ne se soucie pas d'environ 13 à la puissance de 13, il ne se soucie pas d'environ 12 à la puissance de 12. Il va simplement le faire une fois. Et quand tu essaies d'accéder à ce numéro, ça va faire les calculs. Donc c'est un peu paresseux. Il ne fera le calcul que quand on l'exigera. Il ne va pas le faire tout de suite. Ça ne va pas essayer de stocker tout ça en mémoire. La seule chose qui va faire est de stocker 14 à la puissance 14 en mémoire, puis passer au numéro suivant. Il va faire 15 à la puissance 15 et complètement oublier 14. Maintenant, dans Python typique, disons que vous faites Python pour web, vous ne verrez pas beaucoup de rendement, mais dans la science des données, vous allez le voir beaucoup, beaucoup. Et il est très important que nous sachions comment cela fonctionne. Allons de l'avant et renommons ceci de myFunc en mon générateur. Et débarrassons-nous de ça. Et maintenant, nous pouvons dire pour num, ne les utilisons pas. Disons Big Num dans mon générateur. Et puis nous avons vu ici que c'était un objet générateur. Nous pouvons parcourir ces numéros et nous pouvons les imprimer pour imprimer Big Num. Et allons de l'avant et exécutons ça. Maintenant, c'est si rapide avec Python. On ne remarquera même pas ce qui se passe. Mais ce qu'il faisait était la première itération, puis la deuxième itération à la troisième itération, puis la quatrième, cinquième jusqu'à la toute dernière itération. Et vous remarquez comment ces chiffres deviennent assez gros. Ça ne se soucie pas de ce qui s'est passé avant ou après. Et ce qui est important à ce sujet, c'est qu'on peut faire avec des chiffres vraiment, vraiment gros. Alors faisons vraiment grand nombre comme 50 à la puissance de 50. Et voyons si cela peut planter mon ordinateur. Regarde ça. Il a pu faire tout cela assez facilement. Donc je suppose que j'étais inquiet au sujet du plantage de mon ordinateur sans raison. Mais il a pu faire toute cette logique assez facilement. Et donc l'idée est, vous savez, quand il a atteint 49, ça n'a fonctionné que sur 49. Il n'avait pas besoin de se souvenir de ce 4993 où il n'avait pas à se soucier de ce qui se passerait ensuite. Il disait simplement quand il était sur 49. travail sur 49 à la puissance 49 nous donne ce nombre massif ici. Et rien de tout cela n'a besoin d'être stocké en mémoire. Alors que si nous avions une liste, nous devrions avoir tous ces numéros stockés en mémoire. Maintenant, les chiffres sont petits à stocker en mémoire, donc ce n'est pas vraiment si important. Mais lorsque vous avez affaire à des jeux de données géants, en particulier dans des domaines comme l'apprentissage automatique ou la science des données. Vous allez vouloir utiliser yield pour vous assurer que votre ordinateur n'est pas à court de. Eh bien, en pensant au pouvoir, ça ne va pas manquer de RAM. Maintenant, si jamais vous vouliez avoir accès à ces, disons, nous avons dit, nous allons juste commenter cela. Et disons que nous voulions avoir tous ces chiffres. Donc tous les nombres sont égaux à mon générateur. Et puis nous avons voulu imprimer ces chiffres pour une raison quelconque. Tous les chiffres. Allons de l'avant et exécutons ceci une fois de plus. Et ça ne nous donne rien. Ça ne nous donne pas ces chiffres. Au lieu de cela, il retourne un objet générateur. Maintenant, si nous voulions accéder à ces chiffres, ce que nous pouvons faire est de lancer tout ce que ce générateur va rendre le tout. Tous ces chiffres. On peut mettre ça dans une liste. Allons de l'avant et exécutons cela voulait être jeté comme une liste. Et on voit tous ces nombres géants ici. Maintenant, à ce moment où nous lançons ceci comme une liste, ce générateur, quoi qu'il retourne, tous ces nombres sont ce qu'il va retourner va être stocké dans cette variable appelée tous les nombres. Donc maintenant, nous gardons ça pour plus tard. Alors qu'avec juste un générateur régulier, notre exemple précédent n'enregistrait pas ces nombres pour plus tard. On fait quelque chose avec ces chiffres un à la fois. Mais avec une liste. On a dit, oui, d'accord, de traiter tout ça un à la fois. Et puis toutes ces valeurs enregistrées à partir de ce mot-clé yield entrent dans cette liste. Et cette liste va être triée en mémoire que nous puissions travailler avec cette liste. Maintenant, pourquoi nous ferions cela, ou où nous ferions cela est si nous travaillons avec de grands nombres sont beaucoup de traitement. Il peut faire beaucoup de traitement d'une tâche à la fois. Il n'a pas à s'inquiéter de toutes les autres choses avant ou après. Et puis nous pouvons mettre juste la réponse dans une liste. Alors que l'ordinateur en fait 37 à la puissance de 37, nous ne nous soucions pas de ce traitement. Donc, en gros, on dit que c'est un peu plus le mot que je cherche ici ? Temporaire. C'est un peu plus temporaire. Et ainsi ou jetable ajoute un meilleur mot. Ça va faire une chose. Et puis quand c'est fait, il va le jeter dans ce mot-clé yield. Si elle passe à la suivante va disposer de cette mémoire. Ça ne se fiche pas vraiment de ce qu'était la dernière. Il se soucie juste de la tâche actuelle à portée de main. Alors qu'avec une liste ou tout autre type de données, une fois que nous avons stocké dans une variable, il est en fait stocké dans cette variable. Donc, pour utiliser un générateur, puis le stocker dans une variable. Pas vraiment la bonne façon d'utiliser un décorateur et pas un décorateur mais un générateur. C' est plus ou moins ce que nous allons utiliser. Donc, c'est vraiment un moyen de faire une sorte de traitement et de le jeter. Donc nous allons dire pour chaque grand nombre de mon générateur imprimé, et il va traiter un à la puissance de 12, à la puissance de 23, à la puissance de trois, jusqu'à 50 jusqu'à la puissance de 50. Et il va imprimer un à la fois. Il ne va pas stocker tout en mémoire. Il va simplement faire une chose à la fois. Donc, c'est vraiment, vraiment bon pour le code jetable sur de grands ensembles de données. Encore une fois, si vous entrez dans le développement web, vous ne verrez pas de générateurs si souvent pour être honnête. Mais si vous entrez dans la science des données ou l'apprentissage automatique, vous allez voir cela partout et un concept très, très important dans la programmation Python. Et en fait, nous pouvons en faire un autre exemple ici. Passons à la caisse. Donc, nous pouvons dire que le total est égal à la plage de 50 et le total d'impression. Et nous allons voir que cela retourne un décorateur aussi. Et en fait, il n'a pas rendu de décorateur. Il a retourné la plage de fonctions 0 à 50. Il est cependant un générateur dans les coulisses. Et ce que nous ne voyons pas, c'est qu'il n'est pas en boucle et qu'il ne crée pas une liste de 150. Et si on listait la plage 50 ? Nous obtenons maintenant une liste de 0 à 49 ou 50 numéros au total. Et donc cela fonctionne de la même manière que notre générateur fabriqué. Maintenant, une chose à garder à l'esprit est une fois que vous itérez sur l'un des générateurs ici, ça ne fonctionnera plus pour lui. Alors allons de l'avant et décommentons ceci. Débarrassons-nous de cet exemple ici, et réexécutons le script. Et il devrait imprimer tous les chiffres. Mais l'impression ne fonctionnera pas du tout parce qu'il n'y aura rien là-dedans. Le générateur s'est épuisé. C' est une chose simple et faite. Et en fait, je regarde juste ce code et il ne va pas le faire, parce que cela va créer un nouveau générateur pour chacun d'entre eux. Allons de l'avant et jetons ceci dans une variable. Donc mon générateur de var est égal à mon générateur. Et échangeons ça ici contre mon Var gen. Et on peut voir qu'il imprime tous ces chiffres, mais il ne fait rien ici. Donc, ce générateur, cette fonction, nous jetons ceci dans une variable. On a alors dit : « Hé, exécutez ça. Donc, il dit un à la puissance 12 à la puissance 23 à la puissance 349 à la puissance de 49, tout le chemin à travers tous ces nombres triés dans une variable, ce générateur que lui-même épuisé. Donc si on essaie d'accéder à nouveau à ce générateur, on verra qu'il n'imprime rien. Et tout ce qu'il a fait, c'est d'imprimer notre liste géante ici. Mais il n'a pas imprimé un à la fois, peu comme la forme pyramidale qu'on a vu ici. Il ne va pas imprimer aucun de ceux parce que je générateur est fait. C' est une chose unique et faite. Donc, si nous voulions accéder à nouveau au générateur, nous devons, d'une manière étrangement libellée, accéder à ce générateur à nouveau. Et donc nous le faisons de cette façon. On a dit d'appeler ça ici et de le rappeler ici. Et cette fois, nous allons voir des résultats différents. On va voir tous ces grands nombres. Et au-dessus, nous allons voir cette liste de chiffres. Et donc une chose à garder à l'esprit avec le générateur, c'est une chose unique. Une fois que vous avez épuisé le générateur, c'est fini. Vous devez en créer un nouveau ou ne pas en créer un nouveau. C' est un mauvais libellé, mais vous devez instancier ou générer un nouveau générateur. Une fois que vous avez créé ce nouveau générateur, vous pouvez faire ce que vous voulez avec lui. Mais si vous essayez d'exécuter ce générateur plus d'une fois, si c'est comme, par exemple, stocké dans une variable va être épuisé cette première fois et ne se soucie qu'une seule fois. Ce n'est pas comme une fonction, une fonction et vous pouvez continuer à utiliser encore et encore et encore. Un générateur est une chose de type unique et fait. 14. Pipenvs : un autre type d'environnement virtuel: Parlons de Pip. Environnements Pip. Je dis Pip env. Et en Python one-to-one ou Python 201, je ne me souviens pas. Nous avons utilisé une commande python appelée Python dash m dot v. Et puis nous sommes entrés dans un environnement virtuel et cela a créé un environnement virtuel pour nous. Il y a une autre façon de le faire, et il y a en fait plusieurs façons différentes de créer un environnement virtuel. Mais un autre moyen commun est un Pip env. Et personnellement, j'aime vraiment Pip se termine parce qu'ils sont gentils et simples. Et donc on va le faire dans notre ligne de commande ici. Ça rend ça plus grand. Débarrassez-vous de cette barre latérale ici. Et donc je suis dans mon dossier Python 301. Tout d'abord, ce que je veux faire est pip install Pip env. Et en raison de, en raison de faire, il va recueillir Pip env. Et aujourd'hui, j'ai PIP nième. Maintenant, ce que je peux faire est de taper Pip env. Et ça me donne une liste de commandes. Vérifier le graphe propre, installer, verrouiller, ouvrir les scripts d'exécution doivent couler, désinstaller et mettre à jour. C' est beaucoup plus facile que d'écrire Python dash m v, m dot v. Au lieu de cela, ce que nous pouvons faire est de taper. Et je vais éclaircir ça. Nous pouvons taper Pip env install, et cela va créer un environnement PIP pour nous. Donc, faisons juste pip installer. En raison de, en raison fait une chose. Et il dit d'activer vos projets de fin virtuelle exécuter pip, shell, Pip shell. Et maintenant, nous sommes à l'intérieur d'un environnement PIP. Vous pouvez voir que je suis à l'intérieur d'un parce qu'il a des parenthèses ici. Allons de l'avant et tapez python dash v. Et nous allons voir que j'utilise Python 3.9, coucou, coucou. C'est sympa. Sortons de cela en frappant le contrôle D. Donc CTR plus D annulé avec le contrôle C, contrôle D, qui sort de notre env Pip. Maintenant, si je veux revenir, je fais le shell Pip N et je suis à l'intérieur, alors je peux faire pip install. Disons que je voulais installer Django est égal à 2, quelque chose. Doo-doo-doo-doo. Il suffit de le conduire et les solides obtenir 2.2.17. Pip show. Django. Et j'ai deux points à points dix-sept. Maintenant, je sais que sur mon ordinateur je n'ai pas cette version. J' ai django 3.1 quelque chose ou autre. Et donc ceci est maintenant complètement isolé du reste de mon ordinateur et vous pouvez réellement voir l'emplacement de l'endroit où cela est utilisé. C' est dans mon dossier utilisateurs, Caleb Eolian dot partage local EMS virtuel, Python trois ou un, c'est le nom du dossier. Ensuite, une sorte de hachage LIB, Python 3.9 paquets de site. Cool, sortons d'ici avec Control D. Et disons que nous voulons nous débarrasser de cet environnement PIP. On pourrait faire Pip env, Dash, Dash ou M. et juste comme ça. Nous n'avons plus d'environnement PIP. C' est donc un très bon moyen de créer un environnement et de supprimer un environnement. Maintenant, disons que vous avez un projet en utilisant une certaine version de Python. Il y a deux façons différentes d'utiliser Python. Quand il s'agit de la gestion des versions. Vous pouvez utiliser pi n et vous pouvez changer votre version Python. Ou la façon dont je préfère le faire est avec Pip env. Et je peux faire pip installer dash, dash Python. Et faisons Python 3.7. Dans notre dernière version ou dernière env Pip, nous utilisons Python 3.9. Et donc, allons de l'avant et utilisons Python 3.7. Coquille d'env pip. Effacons simplement ce tableau de bord Python V. Et j'utilise Python 3.7.2. Il y a donc deux façons d'utiliser plusieurs versions de Python. Personnellement, je préfère cette façon parce que quand j'en ai fini, je peux simplement dire Pip env, tiret , tiret r, m, et ça va juste l'enlever. Boom, je n'ai plus d'environnement PIP. Si on l'a fait, c'est Dash LA, Grep, le mot Pip. On va voir qu'on a deux dossiers Pip. Maintenant, cette commande va être un peu différente. Si vous êtes sur Windows, c'est probablement juste D-I-R dir. Vous pourriez être en mesure d'utiliser grep. Vous pouvez toujours lister tout ce qui est dans votre dossier à vous pouvez faire. Ou si vous êtes sur Windows ou ls dash LA, si vous êtes sur Mac ou Linux. Et j'ai un fichier Pip et un cadenas Pip. Et ce que c'est le PIP file.txt. Et le fichier Pip spécifie quel type de paquets sont impliqués dans ce fichier Pip. Maintenant, je t'ai montré quand je fais pip installer Django, que ça m'a donné Django. Pour un point à un dix-sept. La bonne façon de le faire serait pip. Installez son juste créer un nouveau Pip env. Et éclairons ça. Ensuite, nous pouvons faire pip installer. Django est égal à 3.1 et il est en train d'installer. Maintenant, le seul inconvénient de Pip est quand vous installez des choses, cela prend quelques secondes de plus. Maintenant, à mon avis, c'est juste quelques secondes pour un environnement virtuel agréable, la vie est plus facile de cette façon. Pip est plus rapide que Pip assez. Certaines personnes ont un problème avec ça. Certaines personnes ne le font pas. Faisons Pip env, shell, clair, Pip, montrer Django. Et maintenant, nous avons django 3.1 ici. Et nous l'avons fait depuis l'extérieur de notre environnement virtuel en écrivant pip install, puis le nom du paquet est égal à la version. Et encore une fois, la chose vraiment belle à ce sujet est que nous pouvons faire pip N Dash, Dash r, m, et ça va nettoyer notre PIP. Et pour nous, tout ce dossier va être supprimé donc nous ne perdons pas d'espace sur notre ordinateur maintenant, si vous êtes comme moi et que vous exécutez sur un Mac, vous pourriez ne pas avoir autant d'espace et vous pourriez vouloir supprimer vos environnements virtuels lorsque vous en avez terminé avec eux, s'ils sont comme des environnements virtuels jetés. Je fais ça tout le temps. Maintenant, j'aime personnellement Pippin. Je l'aime plus qu'un Python Dutch. Et puis point ven. Ven. Si c'est juste beaucoup à taper, c'est un peu bizarre de taper aussi. Juste parce que cela va utiliser la version Python qui est sur votre ordinateur. Maintenant, si je voulais une version différente de Python dans un environnement virtuel, je pourrais faire pip installer dash, dash python, puis la version de Python que je veux. Et ça va marcher pour moi. Maintenant, l'autre façon de le faire en utilisant différentes versions Python est d'utiliser pi n, ce qui est un excellent moyen d'utiliser différentes versions sur votre, sur votre machine également. Mais j'ai lié à localiser mon projet afin que tout soit à l'intérieur d'un environnement virtuel. Parce que ce qui fonctionne sur le site Python 3, disons 3.4 ne fonctionnera pas nécessairement sur 3.9. Et si j'ai un projet en utilisant Python 3.9, mais mon ordinateur n'a que python 3.8. Oh, maintenant je peux aller de l'avant et utiliser pip install dash, dash Python 3.9 et faire fonctionner ça. Maintenant, comme peu de mise en garde, vous pourriez avoir besoin de Pi installé. Si vous avez besoin de pi n, vous pouvez aller voir comment installer Python sur votre ordinateur. Cela va être un peu différent en fonction de votre système d'exploitation. Mais je vais laisser cela entre vos mains parce que vous êtes maintenant un développeur Python avancé. Essentiellement, ce que je dis c'est que tu as les compétences pour comprendre tout seul. Et toute la leçon est qu'il existe plusieurs façons de faire plusieurs environnements virtuels. Nous pouvons faire pip, nous pourrions faire Python, tiret m, alors nous pouvons utiliser virtuel n, nous pouvons utiliser docker, nous pouvons utiliser Vagrant. Nous pouvons utiliser toutes sortes de différentes couches d'abstraction. Personnellement, j'aime Pip n. Maintenant il n'y a pas de tâche. Je voulais juste te montrer ça. Je veux juste vous montrer que c'est une option disponible pour aller de l'avant dans notre prochain, et ce n'est même pas une leçon. C' est notre projet final. Nous allons créer une application bancaire en utilisant des classes. 15. Votre projet final: Bon, bienvenue. Allons de l'avant et créons un projet final. Maintenant, dans ce projet, ce que je veux que vous créez, c'est une application bancaire. Et il n'a pas besoin d'être super complexe, mais il a besoin de quelques petits extras dedans. Donc, tout d'abord, cela devrait être basé sur les classes. Il devrait y avoir des méthodes pour tirer et déposer. Et après chaque retrait et chaque dépôt, je veux que vous écriviez la transaction dans un fichier Python. Maintenant, nous n'avons pas couvert comment ouvrir et écrire dans des fichiers et Python 301, c'était une chose python 201, si je crois correctement. Donc, ce que je veux que vous fassiez, c'est que vous essayez de créer un projet qui va demander à l'utilisateur encore et encore ce qu'il veut faire. Est-ce qu'ils veulent se retirer ou veulent-ils déposer, et combien veulent-ils faire ? Alors je veux que tu gardes une trace de tout ça à l'intérieur d'une classe appelée banque après chaque transaction, n'est-ce pas ? Cette transaction vers un fichier Python. Nous avons donc un historique de cette transaction, ou pas seulement de cette transaction, mais de toutes les transactions. Maintenant, je ne vais plus te donner d'autres indices que nous allons utiliser Wild True. Nous allons utiliser les entrées. Nous allons utiliser des classes, des méthodes et des propriétés. Ça devrait faire transpirer un cerveau. J' espère que c'est tout nouveau truc pour vous. Eh bien, les classes, les méthodes et les propriétés devraient être flambant neuves à l'entrée. Tu devrais connaître l'arbre sauvage, tu devrais savoir, oh, quoi d'autre as-tu besoin ? Vous devez connaître la syntaxe ouverte pour gérer les fichiers. Tu devrais déjà le savoir aussi. Si vous ne le faites pas, allez certainement chercher comment créer cela. Maintenant, ce que je veux que tu fasses, c'est essayer ça tout seul. Ne regardez pas le reste de cette vidéo. Je vais te montrer comment je fais. Je n'en ai jamais construit un au fait. Donc vous allez voir toutes les erreurs que je fais peut-être aussi. Mais si quelque chose est nouveau pour vous, vous ne savez pas comment le faire, vous ne vous souvenez pas. Je vais vous demander de ne pas vous référer à une autre vidéo. Essayez du mieux que vous pouvez. Et si vous êtes vraiment, vraiment coincé, allez à Google, allez à Stack Overflow et cherchez votre réponse là-bas. Parce que 50% du codage les problèmes et vous devez apprendre à résoudre les problèmes par vous-même. Si les enseignants tiennent toujours la main. Honnêtement, tu n'apprendras pas. Et je veux que tu apprennes en tant qu'élève. Non seulement nous regardait parce que c'est comme un style éditorial, Netflix, vous savez, je veux que vous puissiez réellement créer une application Python. Et puis, tu sais, peut-être qu'un jour on peut travailler ensemble et à quel point ça serait cool ? Alors allez-y et créez une application de cuisson à partir de zéro. Rappelez-vous qu'il va devoir demander à l'utilisateur un retrait et un montant ou un dépôt et un montant, garder une trace de tout cela. Ce que je vais faire, c'est fondre ça et revenir en fondu et je vais vous montrer ma solution. D' accord, donc tout d'abord, je vais appeler ce projet dot pi. Et je vais sélectionner tout cela, commenter cela et utiliser cela comme une ligne directrice pour ce que je dois faire. Donc, la première chose dont j'ai besoin est une sorte d'application bancaire. J' ai besoin de créer une classe appelée banque. Et quel sera mon montant initial ? Eh bien, je vais faire du moi sourd init et le montant initial sera 0. C' est combien je vais ouvrir ce compte avec le 0$. Utilisez un flotteur ici, 0.0.0. Self.Age solde est égal au montant initial. Ensuite, je dois me retirer et je dois déposer. Donc sourd, avec le montant de l'auto tirage, je vais prendre cet équilibre, l'équilibre de l'âge auto. Et remontons ça. Self.L'équilibre d'âge est égal à l'équilibre de point auto moins le montant. Maintenant que faire si ce montant est, disons une chaîne pour une raison quelconque. Nous pouvons dire que le montant est égal au montant flottant. Maintenant, on ne sait pas si ça va marcher ou pas. Et donc ce qu'on peut faire ici, c'est, oups, qu'est-ce que je fais ici ? Essayez de lancer cela comme le montant sauf une erreur de valeur. Et ce montant va être 0. Et puis nous allons définir ce New Balance. Nous voulons aussi faire le dépôt. Sourd D posit Combien prendrait toujours auto va prendre un montant. Nous voulons faire la même chose et sauf ici essayer. Le montant est égal au montant flottant, sauf une erreur de valeur. S' il ne peut pas convertir ce montant en un flotteur et que le montant soit égal à 0. Self.Age solde va être le solde auto.age plus quel que soit ce montant va être. Donc, soit nous ajoutons à notre compte, soit nous n'ajoutons rien à notre compte. Et quand nous nous retirons, soit nous retirons de ce compte, soit nous ne retirons rien de ce compte. Rendons cette étape plus petite ici pour que nous puissions voir cela dans une vue. Et maintenant, allons de l'avant et instancier cela. Faisons un compte est égal à la banque. Que faut-il dans son montant initial initial ? Disons que je vais ouvrir ce compte avec 50$. 50.0050.50. Faisons ça. Ensuite, je peux faire le dépôt de points de compte. Et disons que je veux y déposer 10$ ou 10$. Et puis nous allons imprimer mon montant total. points du compte. Et puis disons que je veux retirer 1475, pas avec une virgule, mais avec une décimale. Et nous allons imprimer à nouveau le solde de votre compte et assurez-vous que nous l'épelons correctement. Merci. Vs Code pour m'avoir montré une faute de frappe là-bas. Et ouvrons un terminal et lançons ça. Et donc on a commencé avec 50,50, on a ajouté des dizaines, on a 60,5, c'est bien. Et puis on a pris 14.75. Donc 60,5 moins 14,75 est 45,75. Donc ça semble juste, et je ne vais pas vérifier les maths. Je suis presque sûr que l'ordinateur sait ce qu'il fait. Et maintenant, nous devons ajouter le journal des transactions. Et qu'est-ce qu'on a besoin d'ajouter d'autre ici ? Et nous devons demander à l'utilisateur d'entrer. Donc je vais faire ça. Un pas plus petit, j'ai accidentellement frappé le mauvais bouton là. Un pas plus petit. Et faisons une autre méthode dans votre transaction de journal sourd elle-même. Et puis une sorte de ficelle. Qu' est-ce qu'on fait ? Qu' est-ce qu'on fait ici ? Et appelons simplement cette chaîne de transaction. Maintenant, nous devons ouvrir un fichier. Donc, nous pouvons dire largeur, c'est en utilisant un gestionnaire de contexte ici. Et nous pouvons dire avec les transactions ouvertes 2.txt, nous allons y ajouter tout le temps ou créer un nouveau fichier. S' il n'existe pas en tant que fichier, alors on peut dire point de fichier, non ? Que voulons-nous écrire ? Nous voulons écrire dans la chaîne de transaction, et peut-être ajoutons toujours une nouvelle ligne à la fin. Donc, utilisons une instruction IF ici, une instruction F et F String, et jetons une instruction F et F String, une nouvelle ligne ici. Et cela vient de l'outil Python un, où nous avons appris à gérer les fichiers. Donc maintenant, après chaque retrait, nous pouvons simplement dire s'il y a un montant. Rappelez-vous si 0 est ou si le montant est 0, cela va être faux, donc cela ne va pas s'exécuter. Donc, nous pouvons dire si le montant alors faire une chose. self.view, journal des tendances action et cela prend un montant, ne sont pas un montant mais une chaîne. Il prend la chaîne de transaction. Alors appelons que ça s'est retiré. Combien de dollars le montant. Faisons la même chose avec le dépôt ici. Et ce que je peux faire, c'est que Doo-Doo-Doo copie ça. Et on doit juste s'assurer d'échanger ça. Soyez toujours prudent lorsque vous copiez et collez. Donc, nous pouvons dire que le solde est égal au solde majoré quel que soit le montant. Chaque fois que nous déposons, enregistrez cette transaction, nous ne nous sommes pas retirés. Nous avons visité le déposant, déposé le montant. Et allons-y et ouvrons nos dossiers ici sur le côté. Et nous ne voyons pas les transactions 2.txt. C' est comme ça qu'on l'a appelé ? Transactions point TXT ? On ne le voit pas encore là-dedans. Allez-y et sauvegardez ceci et exécutez ceci et voyez s'il y a des fautes de frappe ou quoi que ce soit. Et d'accord. Coucou, coucou. Et il s'est dirigé montant déposé. J' ai fait quelque chose de très mal là-bas. Qu'est-ce qu'on fait ici ? Tout d'abord, c'est une chaîne F. Ce n'est pas JavaScript. C' est une ficelle F. Ce n'est pas JavaScript. Allons de l'avant et recommençons. Nous voyons des transactions. Nous allons regarder que déposé à 10$, retiré 1475. Ajoutons également le solde de l'année avec un nouveau solde de l'auto-âge. Et si je fais que juste un peu plus petit ici, nous pouvons voir qu'un, j'ai une faute de frappe et être que j'utilise une chaîne d'application. Et en fait, nous pouvons devenir plus fantaisistes avec ça. Nous pourrions dire que quelque chose s'est passé et au lieu d'un New Balance, nous pourrions faire tabulation, onglet, balance. C' est tout ce que l'auto point équilibre. Allons de l'avant et effacons les transactions point TXT. Et faisons ça une fois de plus. Chèques transactions sur dépôt TFC 10$ New Balance, 60,5, retiré 1475 Nouveaux soldes, 45, 75. Ok, ça a l'air plutôt bien. Maintenant, nous devons créer une, une boucle d'une sorte pour demander à l'utilisateur de l'entrée encore et encore et encore. Fermons ça. Et nous avons toute notre logique qui fonctionne. Alors allons de l'avant et enveloppons cela dans quelque chose appelé une boucle while. Bien que vrai. Fais quelque chose. Que voulons-nous qu'il fasse ? Nous voulons demander une action, va être la contribution. Quel genre d'action voulez-vous prendre ? Alors on peut dire, si l'action est dans une liste de Drell ou un dépôt ou si je ne sais pas pourquoi j'ai écrit ça, alors. Fais quelque chose. Donc, nous pouvons dire que si l'action est égale à un retrait, montant sera le genre de montant dû que nous voulons obtenir. Combien veux-tu sortir ? Et puis nous pouvons faire le retrait de point de compte le montant. Et je ne m'inquiète pas à propos de la typographie ici parce qu'on le fait ici. Non, pas là, ici. Et ici. Ensuite, nous pouvons dire autre parce que l'action va être soit retrait ou dépôt. Si cela va être un dépôt, combien voulez-vous dire pas à emporter, mais mettre et retrait de point de compte va être comptabilisé dépôt point d, z le montant. Et puis ici, on peut dire « imprimer ». Votre solde est le solde du compte. Maintenant, nous devons instancier cela avant d'entrer dans la boucle while afin que nous ne créions pas un nouveau compte chaque fois que nous itérons à travers la boucle while. Et débarrassons-nous de ça et de ça, et ça, et ça. Et maintenant, nous avons un objet de compte et nous allons soit retirer ou déposer, puis imprimer le solde. Voyons comment cela se passe. Quel genre d'action veux-tu faire ? Disons que je veux déposer. Combien est-ce que je veux mettre ? Disons que je veux mettre 13$. Mon solde est maintenant de 6350. C' est exact. Quel genre d'action dois-je prendre ? Que faire si je veux me retirer ? Combien tu veux sortir ? Disons 13, 0.5c. Donc, ça nous donne un même 50. Et quittons avec Control C. Oh non, nous obtenons une erreur d'interruption du clavier. Et cela vient de cette ligne d'action. Essayons ça. Essaie. Sauf. Et comment ça s'appelait ? Cela s'appelait une erreur d'interruption du clavier. Mais non, c'était juste appelé clavier, interruption du clavier. Et copions ça. On y va. Et nous allons simplement sortir de cette boucle. Allons-y et essayons ça. Quel genre d'action je veux faire ? Allons annuler. C'est ça. Simplement conseillé pour nous afin que nous puissions même dire imprimer en quittant l'ATM. Et mettons ça sur une nouvelle ligne. Et mettez ça sur une nouvelle ligne. En raison de, en raison de nouveau, nous allons arrêter. Il est dit Quitter l'ATM et une gracieusement gauche en utilisant une exception d'interruption du clavier. Cool, ça se rassemble assez bien. Maintenant, une dernière chose que nous devons considérer est que si l'action n'est pas le retrait ou le dépôt ? Faisons ça. Quel genre d'action dois-je prendre ? Dis que je veux voler la banque ? Ça ne va rien faire. C' est une mauvaise expérience utilisateur. Il ne cesse de demander, ce qui, je suppose, n'est pas la pire expérience utilisateur, mais ce n'est pas une bonne expérience utilisateur. Pour qu'on puisse l'effacer ou l'effondrer. Et on peut dire autre chose. Si l'action n'est pas un retrait ou un dépôt, que voulons-nous faire ? Imprimez. Ce n'est pas une action valide. Essaie encore. Maintenant, faisons ça. Disons que nous voulons voler et pas une action valide. Essaie encore, lapin. Ok, et si on le veut avec tirage au sort ? C' est un mot difficile à taper. Avec. Raul sans espace à la fin. Combien est-ce que je veux sortir ? Disons que je veux sortir 900$. Mon solde actuellement moins $849.50. Donc maintenant, je suis dans le découvert et si vous le vouliez, vous pourriez étendre ça aux découvert et aux prêts et savoir toutes sortes de choses. Mais c'est essentiellement l'ensemble du projet en un mot. Et quand j'annule, ça annule gracieusement. Il ne se contente pas d'erreur. Ça dit que je quitte le guichet. Alors récapitons à quoi ça ressemble. Nous avons une classe appelée banque. Quand vous ouvrez un compte, combien y mettons-nous par défaut ? 0 $, j'ai mis 50.50 cents. Pour commencer. Chaque fois qu'il y a une transaction, nous allons ouvrir le fichier point de transactions TXT. Allons jeter un oeil à ça. Et ça me montre tout ici. C' est génial. C' est un fait exactement ce que je veux qu'il fasse. Pour chaque transaction, qu'il s'agisse d'un retrait ou d'un dépôt, nous allons prendre ce fichier, nous allons y écrire et quelle que soit la chaîne de transaction, donc retiré ou déposer le montant. Onglet, onglet, onglet équilibré avec le solde dedans. enregistreur de transactions simple et cool. Ensuite, nous avons une méthode de retrait. On va essayer de lancer ça comme un flotteur. Si nous ne pouvons pas lancer cela comme un flotteur, il va dire que le montant est 0. Et si le montant est supérieur à 0, il le fera essentiellement, tant que ce n'est pas 0, nous pouvons prendre une sorte d'action. Nous allons changer automatiquement ce solde par rapport à ce qu'il était actuellement. Donc j'ai ouvert avec 50.50 et ça va moins le montant qui vient ici. Et puis nous allons enregistrer ce montant et ce retrait. Enfin, nous avons le dépôt et la même chose. Nous allons essayer de lancer cette quantité comme un flotteur pour que nous puissions faire des calculs numériques dessus. Si nous ne pouvons pas va dire que ce montant est 0. Si ce montant est si ce nombre est en fait un nombre approprié, si ce montant est un nombre approprié, nous pouvons alors changer ce solde pour être équilibré est égal au solde majoré de tout montant. Et puis nous avons dit dans notre enregistreur de transactions, déposé le montant. Enfin, nous créons un nouveau compte, puis nous avons dit marcher jusqu'à l'ATM. Essentiellement, c'est ce que cela dit ici. Bien que quelque chose soit vrai, continuez à demander, à demander et à demander et à demander l'action. Quel genre d'action voulez-vous prendre ? Si nous avons dit Contrôle, si nous annulons, nous obtenons une erreur d'interruption du clavier et nous allons simplement partir, nous allons sortir de cette boucle. Sinon, si l'action est en retrait ou en dépôt, prenez des mesures ici. Et si cette action est un retrait, nous pouvons dire combien voulez-vous retirer puis retirer ce montant. Sinon, si ce n'est pas un retrait, nous savons que ce sera l'une de ces déclarations, retrait ou dépôt. Nous savons qu'il s'agit d'un retrait. Donc, par logique de réduction, cela doit être un dépôt. Ensuite, nous disons que le montant sera entré. Combien voulez-vous mettre dans les comptes dépôt point au montant qui va fonctionner tous ses internes bancaires. Et puis nous pouvons imprimer notre solde à points de compte. Sinon, si quelqu'un essaie de voler la banque ou de faire autre chose avec la banque, ce qu'il ne devrait pas faire. Nous allons imprimer ce n'est pas une action valide. Essaie encore. Il va ensuite exécuter cette boucle une fois de plus et aller encore et encore jusqu'à ce que vous quittiez l'ATM. Et c'est vraiment tout ce qu'il y a à ce projet particulier. Et nous utilisons beaucoup de choses différentes que nous avons apprises dans Python 301. Nous n'utilisons pas nécessairement tout, nous n'utilisons pas de générateur, nous n'utilisons pas de décorateur. Bien que si vous le vouliez, vous pourriez trouver un moyen d'y ajouter. Et si vous le vouliez, vous pourriez probablement transformer transaction enregistrée en une sorte de décorateur pour décorer le retrait et déposer avec eux afin que nous n'ayons pas à l'écrire explicitement ici. Ce serait plutôt cool si tu pouvais faire ça. Et de quoi d'autre parlons-nous ? Fins de pip ? Nous aurions probablement dû le faire dans un environnement PIP, mais vous savez, nous n'installons aucun paquet, donc nous n'avions pas besoin d'un environnement PIP pour cela et nous avions juste besoin de Python régulier sur nos ordinateurs. Et nous n'avons pas utilisé de générateur parce que nous n'avions pas besoin d'utiliser un générateur. Générateur serait vraiment bon si nous, nous sommes en boucle à travers comme un million de clients différents dans notre banque et nous avions besoin de savoir quel client défini. C' est donc tout ce qu'il y a à cette application bancaire particulière. Si vous n'avez pas essayé cela et que vous regardez juste à travers cette vidéo. S' il vous plaît allez-y et essayez ceci. Maintenant, c'est vraiment, vraiment important parce que c'est une bonne pratique d'utiliser une classe. N' oubliez pas si vous avez des questions, vous pouvez toujours rejoindre l'apprentissage du code Groupe sur Facebook. Nous sommes heureux de répondre à toutes les questions Python que vous avez là-dedans. 16. Résumé Python 301: Bienvenue dans le résumé Python 301. J' ai été ton professeur. Vous êtes très fier professeur d'ailleurs, je m'appelle Caleb Eataly et vous pouvez me suivre à Kilo Tolkien sur Twitter. Ou si vous voulez des conseils et astuces de codage, vous pouvez toujours suivre point de codage pour point tout le monde sur Instagram. Si jamais vous avez besoin d'aide, il y a un groupe de soutien gratuit avec des dizaines de milliers de membres dans celui-ci appelé apprendre à coder sur Facebook. Tout ce dont vous avez besoin est un compte Facebook. C' est absolument gratuit. Nous passons des heures dans leur toilettage quotidien pour nous assurer qu'il y a messages de grande valeur là-dedans et qu'il n'y a aucun spam. C' est donc un bon groupe à rejoindre. Si tu veux. Ma méthode d'enseignement, n'oubliez pas, j'ai plusieurs autres cours. Regarde-moi juste. Je m'appelle Caleb, grand, maigre, et vous pouvez les trouver sur toutes sortes de plateformes là-bas, y compris YouTube. Merci d'avoir pris Python 301. Et encore une fois, j'ai été votre hôte et votre instructeur, Caleb Colleen, et j'espère travailler avec vous dans le futur maintenant que vous êtes un programmeur Python avancé, j'espère que vous vous êtes amusé et je vous verrai autour. Au revoir.