- fieldenum est un enum avec valeurs (instanciable).
- Il prend en charge proprement les enums avec champs de Rust.
- Il cherche à trouver un équilibre entre la pureté de la programmation fonctionnelle et le pragmatisme de Python.
- Il fournit par défaut
Option, une alternative à None, ainsi que BoundResult, une alternative aux exceptions.
- Il est entièrement testé.
- La documentation en anglais est encore limitée, mais elle sera progressivement enrichie.
- Tous les types de soutien sont les bienvenus, qu’il s’agisse d’issues, de PR, de stars, etc.
14 commentaires
Je me demande si un type union avec
dataclassne serait pas préférable ; à part une déclaration plus courte, je vois mal les avantages. Y a-t-il un point sur lequelfieldenumest particulièrement meilleur ?Le fait que la déclaration soit courte, concise et ne contienne que l’essentiel constitue aussi un grand avantage.
Par exemple,
Si l’on voulait implémenter le
fieldenumci-dessus avecdataclass, il faudrait écrire quelque chose comme ceci.Le code devient plus long, plus difficile à lire, le risque d’erreur augmente, et on n’a pas vraiment l’impression d’un code propre, n’est-ce pas ?
Bien sûr, même en l’écrivant ainsi, on ne peut pas bénéficier d’autres fonctionnalités fournies par
fieldenum(génériques, repr,__fields__, ...).Avoir
fieldenum, qui implémente et regroupe tout cela, est donc bien plus pratique.Par ailleurs, il peut aussi être utile de consulter le contenu de la section
exemples.dataclassprend en charge par défaut l’implémentation dereprdataclasses.fieldsfournit des informations à l’exécution sur la définition des champstyping, et la syntaxe simplifiée depuis la 3.12Messages, une implémentation sous forme de module est possibleMalgré cela, l’absence de code boilerplate nécessaire pour définir les classes, ainsi que la possibilité d’utiliser enum et class via une interface unique, peuvent clairement constituer des avantages. Merci pour cette explication détaillée.
https://stackoverflow.com/a/47784683
Il y a eu plusieurs tentatives pour représenter des structures de cette manière, mais au final, on peut sans doute y voir une limite, et même un point faible, de Python. J’ai découvert les ADT (algebraic data types) pour la première fois en cours, avec OCaml, et je trouve un peu dommage que, dans le travail, on doive se contenter de les imiter de cette façon.
La bibliothèque créée par ilotoki semble être le cas qui se rapproche le plus d’un ADT. Ce serait bien qu’elle soit un jour intégrée à la bibliothèque standard et largement utilisée.
Si l’implémentation de
Messagese fait avec une Union, il n’est pas possible de tirer parti de l’héritage de méthodes. Par exemple,si l’on ajoute une méthode
.processcomme ci-dessus, on peut utiliser la méthode.process()sur tous les variants.Par ailleurs, le
reprdont j’ai parlé signifie le «repren tant que variant de cet enum ». Par exemple, si l’on appellerepren l’enveloppant avec fieldenum, cela s’exécute comme suit.Sans
__repr__personnalisé, le fait qu’il s’agisse d’un sous-variant de l’enumMessagen’est pas représenté.Quitest un unit variant qui s’utilise sans appel.De plus, dans le cas des fieldless variants, qui sont un type de variant nécessitant un appel, on peut les vérifier comme des singletons avec l’opérateur
is.L’utilisation de fieldenum aide ainsi à prendre automatiquement en charge divers détails d’implémentation faciles à manquer.
Je me permets de vous proposer de faire une présentation à la PyCon Corée. J’ai trouvé ça vraiment passionnant, et j’aimerais beaucoup entendre directement votre récit et vos explications sur le processus de création !
Ce serait vraiment un honneur de pouvoir faire une présentation à la PyCon. Je ne sais pas si le simple fait que j’en aie envie suffira à y parvenir(^^;), mais je vais y réfléchir.
Et il serait bien que l'exemple d'
Optionsoit aussi expliqué dans le README en anglais.Optionest facile à comprendre et permet une approche plus familière. Je pense aussi qu'il serait peut-être préférable de présenterOptionen premier dans l'ordre des explications de la documentation.La documentation en anglais n'est pas encore prête, donc elle reste un peu succincte... Je compte la traduire en anglais une fois que la documentation en coréen sera suffisamment aboutie. Ou bien les PR associées sont aussi les bienvenues !
Je suis aussi d'avis qu'il vaut mieux présenter
Optionen premier. Je vais corriger cela.Oh oh. C’est étonnant !!
Il y a une correction à apporter dans le code d’exemple de la documentation coréenne liée.
Merci de l’avoir signalé. C’est corrigé !
J’aurais dû le publier sur Show GN, mais je l’ai mis par erreur dans la catégorie générale ;;
J’ai effectué la correction.
Merci ~