Comments on: Les enums en Python http://sametmax.com/les-enums-en-python/ Du code, du cul Fri, 06 Sep 2019 09:34:15 +0000 hourly 1 https://wordpress.org/?v=4.9.7 By: Nicolas http://sametmax.com/les-enums-en-python/#comment-196333 Tue, 03 Jul 2018 23:16:33 +0000 http://sametmax.com/?p=17824#comment-196333 Je viens de voir un cas d’utilisation dans un tuto qui me semble intéressant. Le contexte : modèle de base de données avec sqlalchemy :

D’abord on crée un enum avec les valeurs possibles en entrée :

class Gender(enum.Enum):

female = 0

male = 1

other = 2

Puis on l’appelle dans la classe modèle

class Content(db.Model):

gender = db.Column(db.Enum(Gender), nullable=False)

Ça permet de faire ensuite le mapping en écriture et en lecture sur ses requêtes. Est-ce que ça aurait marché pareil avec un dico? I don’t know :]

]]>
By: Sam http://sametmax.com/les-enums-en-python/#comment-196170 Fri, 29 Jun 2018 07:52:13 +0000 http://sametmax.com/?p=17824#comment-196170 C’est un allusion au jeu vidéo éponyme unanimement adoré par les co-auteurs.

]]>
By: Youness http://sametmax.com/les-enums-en-python/#comment-196167 Fri, 29 Jun 2018 06:38:18 +0000 http://sametmax.com/?p=17824#comment-196167 est ce une coicidence que le nom du site est sam et max ou bien c’est une allusion aux fréres sam et max kellerman?

]]>
By: Sam http://sametmax.com/les-enums-en-python/#comment-192287 Wed, 07 Feb 2018 18:35:57 +0000 http://sametmax.com/?p=17824#comment-192287 Y a des listes de tuples pour ça. Ou des dicos.

]]>
By: rewk http://sametmax.com/les-enums-en-python/#comment-192259 Mon, 05 Feb 2018 19:13:38 +0000 http://sametmax.com/?p=17824#comment-192259 Un des usages que j’ai des enums est de fournir une liste de choices à argparse. Mettons que je veuille faire un setteur qui prend des valeurs discrètes.

parser.add_argument("--set", choices=[monenum.value for monenum in MonEnum])

Comme ça, je peux facilement lier un affichage avec un identifieur qui ne sera pas forcément le même.

Je sais que la valeur est correcte et validée par argparse. Je peux alors facilement utiliser MonEnum(args.set) dans le reste du code.

Je trouve ça sympa de ne pas avoir à risquer de me tromper quand la valeur de l’enum n’est pas la même que le nom.

]]>
By: Bob http://sametmax.com/les-enums-en-python/#comment-192062 Tue, 23 Jan 2018 10:54:29 +0000 http://sametmax.com/?p=17824#comment-192062 Si tu ne vois pas l’intérêt des enums, arrête de développer…

]]>
By: Sam http://sametmax.com/les-enums-en-python/#comment-188518 Thu, 27 Jul 2017 19:23:11 +0000 http://sametmax.com/?p=17824#comment-188518 Fixed

]]>
By: ast http://sametmax.com/les-enums-en-python/#comment-188504 Thu, 27 Jul 2017 10:13:07 +0000 http://sametmax.com/?p=17824#comment-188504 Dans la ligne

Stuff = namedtuple(‘Stuff’, ‘FOO BAR DOH OYO’)(*range(1, 5))

Le 1er “Stuff” est un objet, pas une classe, le nom devrait commencer par une minuscule, stuff.

C’est namedtuple(‘Stuff’, ‘FOO BAR DOH OYO’) qui est une classe de nom Stuff

ça m’a perturbé un moment

]]>
By: Sam http://sametmax.com/les-enums-en-python/#comment-174948 Wed, 27 Jan 2016 13:43:50 +0000 http://sametmax.com/?p=17824#comment-174948 Mais justement, il vaut mieux utiliser des dictionnaires que des classes dans bien des cas. Utiliser des classes ou des enums à tout vas en Python est le signe qu’on a pas laché les habitudes d’autres langages.

Par exemple, tu parles de refactoring. Mais en en Python le refactoring est rarement un gros problème comme dans d’autres langage. Le duck typing, le typage dynamique et les outils mis à disposition font que c’est presque toujours beaucoup plus facile et rapide en Python.

Il faut utiliser les outils dans un contexte où leurs bénéfices sont supérieurs à leur coût. En Python, de nombreux outils d’autres langages sont inutilement lourds ou compliqués. Chaque usage d’un outil de plus demande à connaitre une chose de plus pour comprendre et utiliser le code.

]]>
By: LeBouquetin http://sametmax.com/les-enums-en-python/#comment-174933 Wed, 27 Jan 2016 09:41:37 +0000 http://sametmax.com/?p=17824#comment-174933 @Sam, je ne vois pas en quoi l’usage que tu présentes (TYPE.GET) est idiot. J’aurais même tendance à dire que c’est idiot de trouver ça idiot :

l’exemple que tu prends se base sur les verbes HTTP qui sont d’une part peu nombreux, et d’autre part normalisés. C’est rarement le cas du code qu’on écrit. Par exemple si tu veux gérer le statut d’un type d’objets, le fait d’utiliser un enum’ permet de normaliser la liste des valeurs possibles, donc il est plus rapide de monter en compétence sur le code
l’utilisation de “string” est un anti-pattern, et pose de gros problèmes en terme de refactoring, mais également d’efficacité : le mec qui tape ‘GEt’ va perdre du temps à détecter qu’il a fait une faute de frappe là où l’utilisation d’une constante permettra de visualiser l’erreur immédiatement (par exemple avec PyCharm, c’est le cas)

Vouloir utiliser des string “parce que c’est plus simple/souple” c’est comme de dire “on va utiliser des dictionnaires au lieu de classes”. Tant que tu travailles tout seul, c’est pas un problème, par contre quand tu travailles en équipe, c’est bien de savoir ce que le code de ton collègue attend comme structure, c’est de l’auto-documentation.

]]>