Тёмный

Pourquoi Je Ne Peux Plus Me Passer Des Énumérations en Python 

Code Avec Dave
Подписаться 1,3 тыс.
Просмотров 1,3 тыс.
50% 1

Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com
Si tu veux rejoindre une communauté de développeurs actifs et motivés : / discord

Наука

Опубликовано:

 

3 июл 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 11   
@ApprendreSansNecessite
@ApprendreSansNecessite 16 дней назад
Je pense que c'est plus pratique et safe de faire ça au niveau du système de type: `Priority = Literal['low'] | Literal['medium'] | Literal['high']` - Une union te donne plus de confort au niveau de l'auto-complétion parce que tu n'as que 3 suggestions (et pas tous les attributs et méthodes de ta class Priority). - Elle te donne aussi plus de confort et de sécurité si tu utilises match/case, parce qu'à chaque `case` que tu ajoutes, la liste des suggestions va se réduire (même si mypy ne check absolument pas l'exhaustivité ou la répétition des cases) - Utiliser des valeurs numériques automatiques est embarrassant quand tu dois ajouter une valeur intermédiaire, du genre 'medium-high': avec une énumération ça va incrémenter 'high', ce qui veut dire que tu ne dois jamais faire persister un enum en utilisant sa valeur numérique, il faut donc prévoir une étape de conversion en string supplémentaire quelque part. Pour aller plus loin, une union de types (ou type somme) permet d'avoir une approche fonctionnelle qui bénéficie du fait que l'état de ton Ticket peut être représenté au niveau des types pour rendre les états illégaux impossibles à représenter sans te faire engueuler par ton IDE (à condition de créer des Tickets immutables, donc des "value objects") Par exemple tu pourrais, au niveau du système de type, rendre impossible de fermer un ticket qui n'est pas dans l'état 'in progress' ; tu pourrais rendre impossible la création d'un ticket qui soit à la fois 'low' et 'closed' (Ça n'a pas de sens ici mais quand tu as deux états orthogonaux il arrive souvent que certaines combinaisons soient illégales) ; ou plus simplement tu peux rendre illégal le fait d'appeler une fonction `next()` sur un Status 'closed' parce que 'open' n'est pas la suite logique de 'closed'. Au contraire, gérer un overflow sur un enum avec un modulo, ça peut être traitre. Pour faire ça en Python, j'ai l'impression que le plus propre c'est de refactor ton union comme ceci: `Priority = Low | Medium | High` avec des alias pour chaque valeur (`Low = Literal['low']`, etc.) que tu peux utiliser comme type hint dans des fonctions. Le système de type de Python a beau être immature, il a déjà mieux à proposer que l'approche OOP classique.
@codeavecdave
@codeavecdave 16 дней назад
C'est un raisonnement que j'essaye d'utiliser de plus en plus dans mon code parce que c'est une solution simple mais beaucoup plus puissante. En soi, même si le but de la vidéo était de présenter les énumérations, en production je pense que ta solution serait meilleure et plus maintenable
@codeavecdave
@codeavecdave 16 дней назад
J'ai épinglé ton commentaire pour qu'un maximum de personne le voit
@ApprendreSansNecessite
@ApprendreSansNecessite 16 дней назад
Petit addendum, j'ai remarqué que en tout cas sur VS Code avec Pylance et typing.TypeVar + typing.Generic, tu ne peux pas avoir d'auto-completion sur une contrainte de type quand tu instancie une class. Tu as bien des erreurs quand tu mets la mauvaise valeur, mais c'est pas méga pratique. J'espère que ce sera réglé avec l'implémentation de PEP 695. parce que si tu veux définir une méthode ou une fonction `close(self: 'Ticket[Priority, InProgress]')` il te faut absolument des génériques
@karinek6808
@karinek6808 22 дня назад
Merci, c'est super instructif. Si tu as le temps un de ces quatre, pourrais tu faire une video explicative sur l'asynchrone/synchrone ? c'est un peu Cho comme concept pour moi mais comme tu explique vraiment bien
@codeavecdave
@codeavecdave 19 дней назад
Merci beaucoup ! Je pense que je ferais une grosse vidéo sur ce concept parce que c'est super important à comprendre mais c'est sûr que je vais faire des vidéos dessus
@dragweb7725
@dragweb7725 20 дней назад
mais c'est tellement pratique comme feature ! j'ai actuellement un projet qui serait pas mal simplifié en introduisant ces énumérations aux bons endroits, merci beaucoup pour le tips !
@codeavecdave
@codeavecdave 19 дней назад
Avec plaisir ! Tu verras, ça va vraiment te faciliter la vie
@antoniopisanello440
@antoniopisanello440 11 дней назад
Par contre il faut noter quand même que les enums ne t’empêchent pas de faire ticket.status = "abc". Techniquement, c’est toujours faisable, les joies de python 🙃
@codeavecdave
@codeavecdave 10 дней назад
Oui ça reste possible de faire encore n'importe quoi sans erreur de compilation. Malgré tout, on aura quand même des erreurs dans l'IDE ce qui est le plus souvent suffisant
@merlin2600
@merlin2600 15 дней назад
Les enums avec des valeurs en int, je trouve ça très peu pratique. Heureusement, Python supporte ça: class Status(Enum): OPEN = "open" CLOSED = "closed" Quand on veut passer d'une str à l'enum, il suffit de faire Status(api.new_status) et c'est très bien. Django fonctionnait historiquement avec des choices: OPEN = "open" CLOSED = "closed" STATUS_CHOICES = ( (OPEN, "Open"), (CLOSED, "Closed"), ) Maintenant, on peut utiliser des enums aussi mais je trouve que ça reste assez clunky comme intégration. Par contre, Graphene ne m'a apporté que des problèmes avec les enums.
Далее
5 Really Cool Python Functions
19:58
Просмотров 57 тыс.
Что не так с воздухом в Корее?
00:45
Она Может Остановить Дождь 😱
00:20
УРА! Я КУПИЛ МЕЧТУ 😃
00:11
Просмотров 268 тыс.
The moment we stopped understanding AI [AlexNet]
17:38
Просмотров 771 тыс.
Generics: The most intimidating TypeScript feature
18:19
Les Décorateurs en Python Sont TELLEMENT Utiles
11:32
Просмотров 1,8 тыс.
On a reçu le hacker qui rend fou les pirates chinois
23:15
6 Levels of Thinking Every Student MUST Master
17:12
Просмотров 1,3 млн
J'ai codé une simulation pour comprendre l'égoïsme.
11:29
On a reçu l'étudiant qui a fabriqué son processeur
11:31
iPhone 15 Pro в реальной жизни
24:07
Просмотров 440 тыс.
ОШИБКИ НА ANDROID 2
5:13
Просмотров 35 тыс.
ОШИБКИ НА ANDROID 2
5:13
Просмотров 35 тыс.
Это Xiaomi Su7 Max 🤯 #xiaomi #su7max
1:01
Просмотров 2 млн