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 :

pythonic or not pythonic


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 25
    Par défaut pythonic or not pythonic
    bonjour, merci de ma lire et encors merci si vous me lisez jusqu'au bout

    voila, ma question est d'ordre quasi-philosophique.

    je doit générer un fichier texte avec des champ a largeur fixe :
    ex :
    60 23112010FF40000000 X00014484
    soit comme règles :
    élément 1: offset=1 taille=3 (60 )
    élément 2: offset=4 taille=8 (23112010)
    élément 3: offset=12 taille=2 (FF)

    etc...

    j'ai donc créé des classe pour chaque Champ avec les info d'offset et de taille.
    j'ai aussi crée une classe Enregistrement qui doit contenir ces champ...

    mon dilemme viens de comment enregistrer la structure de ma ligne dans mon objet Enregistrement.

    j'aurais bien créer une variable de classe contenant la liste des champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    structure = [
                ChampText(nom="JOURNAL" , taille=3 , offset=1 , obligatoire=True) ,
                ChampDate(nom="DATECOMPTABLE" , taille=8 , offset=4 , obligatoire=True) ,
                ChampValue(nom="TYPE PIECE" , taille=2 , offset=12 , obligatoire=True , valides=\
                           [
                                "FC",
                                "AC",
                                "RC",
                                "FF",
                                "AF",
                                "RF",
                                "OD",
                                "OC",
                                "OF"
                           ])
              ]
    et ensuite copier cette structure a chaque instanciation d'un enregistrement, mais je ne vois pas comment faire pour qu'il n'y ai pas l'instanciation au moment de la création des la structure(comme c'est le cas actuellement) mais seulement a la création de l'instance Enregistrement.

    j'ai déjà entrevue plusieurs solutions :
    - déplacer le code de la structure dans __init__
    - poser les arguments dans un dico au lieu de créer mon objet directement dans la structure
    - cloner la structure de mon attribut de classe a chaque __init__

    en gros, je pourrait le faire, mais quel est la solution la plus pythonic ?


    edit:
    j'ai temporairement opté pour une méthode de classe qui retourne une nouvelle liste de champ.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Bonsoir,

    Je ne comprends pas ta question. Cette structure est la même pour toutes les instances, non ? Il n'y a rien qui me semble 'mutable' dans cette structure. Un attribut de classe me semble la meilleure place. A quoi bon la recopier pour chaque enregistrement ?

    Et déjà, pourquoi utiliser ce genre de méta-description de tes enregistrements ? Est-ce que c'est pour gérer la (dé)sérialisation automatiquement ? la validation des entrées dans un formulaire ? Cela se justifierait si tu avais plusieurs types d'enregistrement avec ce type de format, mais ici tu ne parles que d'un seul format...

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 700
    Par défaut juste pour en rajouter...
    Salut
    Je doit générer un fichier texte avec des champ a largeur fixe :
    Ce fichier sera la représentation sérialisée de l'état d'objets "Python".
    => Il pourrait être "utile" d'avoir des méthodes loads/dumps dont le boulot serait de transformer "60 23112010FF40000000 X00014484" en objet et réciproquement.
    La classe représentant les objets semble avoir pour attributs:
    • journal
    • date_comptable
    • type_piece

    Quel type Python mettre en face? Mystère pour l'instant... mais Python n'est pas très contraignant...

    Les informations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ChampText(nom="JOURNAL" , taille=3 , offset=1 , obligatoire=True)
    racontent le formatage de la représentation sérialisée de ces objects...
    Il n’intéresse à priori que loads/dumps.
    Une façon Pythonique de... pourrait être d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class MyObjects(object):
          journal = ChampText(nom="JOURNAL" , taille=3 , offset=1 , obligatoire=True)
          ...
    i.e. on se contente de décrire la structure... et on passe par des metaclass pour rendre "automagic" les opérations a effectuer à partir de là.*
    Note: C'est du boulot mais c'est un voyage intéressant.
    Cordialement
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. PyInstaller: python library not found
    Par mokochan dans le forum Déploiement/Installation
    Réponses: 2
    Dernier message: 16/05/2014, 09h14
  2. Quel choix pour mon projet ? (Python or not Python)
    Par samue101 dans le forum Débuter
    Réponses: 3
    Dernier message: 09/06/2013, 22h56
  3. Réponses: 7
    Dernier message: 02/11/2009, 17h03

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