J'ai un énumé j'ai 2 prototypes de méthodes: p> Voici comment je veux appeler cette méthode: < / p> Comment la mettre en œuvre en python? p> p>
6 Réponses :
class Nationality: Poland='PL' Germany='DE' France='FR' Spain='ES' nationalityDict = {} for k, v in Nationality.__dict__.iteritems(): if not k.startswith('__'): nationalityDict[v] = k And now: nationalityDict['DE'] contains Germany.
NationalityDict = {V: K pour K, V en Vailles (nationalité) .ITEMS () Si k [: 2]! = '__'} code>
NationalityDict = DICT (((V, K) pour K, V en Vars (nationalité) .ITEMS () Si k [: 2]! = '__') Code> - Pour Python 2.6 et plus ...
Voulez-vous utiliser dict à la place?
Nationality = { "PL" : "Poland", "DE": "Germany"} print Nationality["DE"] # prints 'Germany'
Non, parce que j'utilise cet énumé dans les autres module, et je ne veux pas dupliquer du code
La meilleure solution serait de créer un dictionnaire dès le début. Votre énum n'a pas de sens dans Python, c'est juste inutilement complexe. On dirait que vous essayez d'écrire code Java , qui est tout à fait le contraire de ce que le code Python est censé ressembler. P>
Mais que si je veux cette nationalité Enum dans de nombreux modules. Isi est une bonne idée de l'écrire dans chaque module? Je suis programmeur C #, je sais donc que je ne reçois pas de conception python entier
@user: Vous ne pouvez créer le dictionnaire qu'une seule fois, puis l'importer dans d'autres modules - cela ne fait pas une différence s'il s'agit d'une classe ou non. En général, travailler dans une langue dynamique comme Python peut être très différent de Java ou C #. Il faut du temps pour s'y habituer, mais à la fin, cela vaut bien l'effort et fait de vous un meilleur programmeur globalement.
Vous avez raison, mais quand j'arrête d'utiliser Enum, j'ai perdu une perte automatique d'IDE et je ne veux pas ça.
@user: Malheureusement, l'autocomplete ne fonctionnera jamais également dans une langue dynamique par rapport à une langue statique. Donc, je n'essaierais pas trop de ne pas le casser, car sinon, vous pourriez encore vous retrouver avec le code Java. C'est simplement l'un des inconvénients des langues dynamiques.
Mon approche serait comme celle-ci (peut-être pas parfaite, mais vous obtenez l'idée): J'espère que cela aide. P> P>
python 3.4 a un nouveau type de données ENUM ( qui a été rééquilibré ), qui prend en charge facilement Votre cas d'utilisation: pour obtenir le membre Enum à partir du nom: p> pour obtenir le membre Enum de la valeur: p> et une fois que vous avez le membre Enum: p>
Que diriez-vous d'une méthode pure pour la conversion à l'énumération? Cacher cela dans un util lib. Ou vous pouvez le mettre sur une classe de base enum et avoir la valeur de valeur target_enum à soi-même.
pourrait également modifier cela pour soulever une exception au lieu d'utiliser la valeur par défaut, mais la valeur par défaut fonctionnait mieux pour mon cas particulier. P> < Pré> xxx pré>
Voici la classe unittest pour cela. p>
Qu'avez-vous essayé? Veuillez poster le code Python que vous avez essayé. Nous n'aimons pas écrire de code pour vous. Cependant, nous vous aiderons à résoudre des problèmes avec le code que vous avez écrit.
S.Lott et de nombreuses autres personnes n'aiment pas l'écriture de code pour vous. Certaines personnes apprécient effectivement de rédiger un code d'autre, gratuitement. Cependant, la solution que vous obtenez pourrait ne pas être ce que vous voulez ...