IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

[Enum.Flags] from string en py 3.8


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut [Enum.Flags] from string en py 3.8
    bonjour
    j'ai une enum de type flag
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # enum position (for centroid)
    class Position(enum.Flag):
        hright = 0x00
        hcenter = 0x01
        hleft = 0x02
        vtop = 0x00
        vcenter = 0x10
        vbottom = 0x20
    et j'aimerais convertir une chaine en ce type d'enum
    ce code avec un seul élément fonctionne très bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        v = "hcenter"
        xx = Position.__dict__[v]
    toutefois sir je veux faire une enum flagé
    comme
    v = "hcenter|vbottom"

    j'aimerais savoir comment proceder

    merci

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par ikeas Voir le message
    toutefois sir je veux faire une enum flagé
    comme
    v = "hcenter|vbottom"

    j'aimerais savoir comment proceder
    xx = Position.__dict__["hcenter"] | Position.__dict__["vbottom"]
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    merci
    mais si je veux partir d'une sérialisation dans un fichier json par exemple ?

    évidement je peux spliter sur | et faire un |= a chaque élément

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ikeas Voir le message
    évidement je peux spliter sur | et faire un |= a chaque élément
    Voilà. Parce que Python c'est pas de la magie, il ne peut pas comprendre tout seul que la string "hcenter|vbottom" ce n'est pas une simple string mais en réalité deux strings séparées par un séparateur particulier et qu'en plus ce séparateur correspond à un opérateur mathématique.
    Donc à toi de
    • séparer
    • opérer
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    avec cette fonction ca fonctionne très bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     @staticmethod
        def stringToPosition(sc):
           p = Position.hright
           ss = sc.split('|')
           for s in ss:
                p |= Position.__dict__[s]
           return p

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ikeas Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def stringToPosition(sc):
    	p = Position.hright
    	ss = sc.split('|')
    	for s in ss:
    		p |= Position.__dict__[s]
    	return p
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import functools
    import operator
     
    def stringToPosition(sc):
    	return functools.reduce(operator.or_, (Position.__dict__[s] for s in sc.split("|")), Position.hright)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Autre solution en lisant la doc Enum, que je n'utilise jamais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @classmethod
     def from_string(cls, s):
          flags = [cls.__members__[letter].value for letter in s.split('|')]
          return cls(sum(flags))

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/12/2009, 12h57
  2. Conversion error from string "15-AUG-2008"
    Par freud dans le forum SQL
    Réponses: 2
    Dernier message: 17/08/2008, 19h24
  3. from string to collection
    Par anasshb dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 01/11/2007, 13h53
  4. [enum] recuperer la string
    Par ZaaN dans le forum C++
    Réponses: 10
    Dernier message: 16/11/2006, 23h08
  5. [VB.NET] Variable de type enum avec du string
    Par Mouse dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/01/2005, 18h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo