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 :

comment faire pour imprimer à l'écran un objet


Sujet :

Python

  1. #1
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 16
    Par défaut comment faire pour imprimer à l'écran un objet
    j'ai un objet qui contient une chaine
    et je veux que mon objet ait les mêmes méthodes qu'une chaine classique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Message
      __init__(self, txt)
        self.txt=txt
     
     
    message1=Message('bonjour')
     
    >>print message1
    La machine dit "bonjour"
     
    >>print "La machine parle : "+message1
    La machine parle : La machine dit "bonjour"

  2. #2
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut Re: comment faire pour imprimer à l'écran un objet
    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
    class Message:
      def __init__(self, txt):
        self.txt=txt
     
      def __str__(self):
        return self.txt
     
     
    message1=Message('bonjour')
     
    >>print message1
    La machine dit "bonjour"
     
    >>print "La machine parle : " + str(message1)
    La machine parle : La machine dit "bonjour"
    C'est un début de réponse... Dommage qu'il faille le "str" dans le deuxième cas. Il y a des interfaces en python ?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 16
    Par défaut
    Il suffirait de définir correctement les métodes
    __add__ et __radd__
    non?

    Mais comment on fait?

  4. #4
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Ouaip, t'as raison...
    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
    17
    18
    class Message:
      def __init__(self, txt):
        self.txt=txt
     
      def __str__(self):
        return self.txt
     
      def __add__(self, s):
        return str(self) + s
     
      def __radd__(self, s):
        return s + str(self)
     
    message1=Message('bonjour')
     
    print message1
    print message1 + " message"
    print "La machine parle : " + message1

  5. #5
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 16
    Par défaut
    super merci.

  6. #6
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 14
    Par défaut
    voici une autre piste l'utilisation de la classe str comme classe parente:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Message(str):
        pass
     
    msg = Message("texte")
    print msg
    print "message :" + msg
    print msg + " spam"
    print msg[2:]
    toutes les fonctions par defaut des chaines sont utilisables.

    le_GLu

  7. #7
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 16
    Par défaut
    merci il faudra que j'y regarde : je n'y avait pas pensé mais à priori c'est loupé:
    La finialité n'est pas aussi simple: txt n'est pas formaté...

    Merci

  8. #8
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 14
    Par défaut
    Citation Envoyé par GConstant
    merci il faudra que j'y regarde : je n'y avait pas pensé mais à priori c'est loupé:
    La finialité n'est pas aussi simple: txt n'est pas formaté...

    Merci
    pour modifier la chaine de caractere il faut utiliser la fonction prédéfinié __new__ et non pas __init__.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Message(str):
        def __new__(cls, value):
            return str.__new__(cls, "Message formaté: %s." % value.capitalize())
     
    >>> msg = Message('test')
    >>> print msg
    Message formaté: Test.
    >>>
    le _GLu

  9. #9
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 16
    Par défaut
    ha ba ca c'est joli.

    Le mieux c'est que tu ne pose pas de qst et on te donne la réponse quand même...

    cette fois il n'y a peut être pas mieux à faire...

  10. #10
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 16
    Par défaut
    Citation Envoyé par GConstant
    cette fois il n'y a peut être pas mieux à faire..
    Quoi que:

    et si je veux que mon Message gère le formatage à l'appel...

    supposons par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Message: 
      def __init__(self, txt): 
        self.txt=txt 
     
      def __str__(self): 
        return self.txt
     
    mes = Message('bonjour %(individu)s')
     
    print str(mes) %{'individu':'toto'}
    print mes
    ce qui donne comme résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bonjour toto
    bonjour %(individu)s
    Et je veux obtenir dans le 2ème cas : "bonjour " tout court...

    PS: si je suis chiant tu peux le dire ca te fera du bien

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 89
    Par défaut
    Je te proposerais bien ça:
    - on hérite de str
    - on redéfinit __str__ pour qu'il supprime les formatages (%... disparait)
    - on redéfinit __mod__ pour qu'il ne lève pas l'exception KeyError

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    class Message(str):
     
        import re
        __fmt_re = re.compile('%(?:\((.*?)\))?([#0\- +])?([0-9]+|\*)?((?:\.[0-9]+)|\*)?[hHlL]?([diouxXeEfFgGcrs])')
     
        def original(this):
            return str.__str__(this)
     
        def __str__(this):
            s = this.original()
            s = this.__class__.__fmt_re.sub('',s)
            s = s.replace('%%','%')
            return s
     
        def __mod__(this,dic):
            try:
                s = str.__mod__(this,dic)
            except:
                s = this.original()
                m = this.__class__.__fmt_re.findall(this)
                for (key,flag,width,precision,conversion) in m:
                    f = '%'+(key and '('+key+')' or '')+flag+width+precision+conversion
                    if key not in dic.keys() and conversion != '%': s = s.replace(f, '%'+f)
                s = str.__mod__(s,dic)
            return Message(s)
     
     
    mes = Message('%%! bonjour %(individu)s, %(age)i ans')
    print mes
    print mes %{'individu':'toto'}
    print mes.original()
    %! bonjour , ans
    %! bonjour toto, ans
    %%! bonjour %(individu)s, %(age)i ans
    (J'ai mis un %% au début pour vérifier que ce cas marchait bien)

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

Discussions similaires

  1. Comment faire pour imprimer un état?
    Par Midou45 dans le forum Word
    Réponses: 10
    Dernier message: 02/01/2009, 11h41
  2. comment faire pour imprimer une partie de ma page
    Par hbar01 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/04/2008, 02h31
  3. comment faire pour imprimer?
    Par dispa dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/11/2007, 14h44
  4. Réponses: 1
    Dernier message: 06/09/2006, 18h11
  5. Comment faire pour imprimer une frame ?
    Par serialkilled dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 23/05/2006, 15h32

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