OVH Cloud OVH Cloud

des methodes speciales

8 réponses
Avatar
Eric Deveaud
Bonjour.

une question bete concernant la methode __str__ a laquelle je voudrais pouvoir
passer des arguments

soit:

class Ex:
def __init__(self, v1, v2):
self.v1 = v1
self.v2 = v2

def __str__(self, with_v2=False):
s = "V1: %d" % (self.v1)
if with_v2:
s += "(V2: %d)" % (self.v2)
s += '\n'
return s


si je fais
e = Ex(1,2)
str (e) me retournera 'V1: 1\n'
print e m'affichera V1: 1

je peux faire e.__str__(with_v2=True) me retournera la chaine en prennant en
compte V2, mais est-il possible de, et comment faire pour, specifier ceci lors
d'un appel a print ???

Eric

PS j'ai deja un wrapper autour de ceci via une methode de x.


--
Selon les logs, il y a des pertes de porteuses, mais surtout des
requêtes de déconnexion qui viennent de votre machine.
Il faut se rappeler que windows 95 est un systeme bio-dégradable.
-+- Support technique HOL in: Guide du Cabaliste Usenet - CQFD ! -+-

8 réponses

Avatar
andre.roberge
Eric Deveaud wrote:
Bonjour.

une question bete concernant la methode __str__ a laquelle je voudrais po uvoir
passer des arguments

soit:

class Ex:
def __init__(self, v1, v2):
self.v1 self.v2
def __str__(self, with_v2úlse):
s if with_v2:
s + s + return s


si je fais
e str (e) me retournera 'V1: 1n'
print e m'affichera V1: 1

je peux faire e.__str__(with_v2=True) me retournera la chaine en prenn ant en
compte V2, mais est-il possible de, et comment faire pour, specifier ceci lors
d'un appel a print ???


Si je ne m'abuse, print utilise __repr__().
André


Eric

PS j'ai deja un wrapper autour de ceci via une methode de x.


--
Selon les logs, il y a des pertes de porteuses, mais surtout des
requêtes de déconnexion qui viennent de votre machine.
Il faut se rappeler que windows 95 est un systeme bio-dégradable.
-+- Support technique HOL in: Guide du Cabaliste Usenet - CQFD ! -+-


Avatar
bruno at modulix
Eric Deveaud wrote:
Bonjour.

une question bete concernant la methode __str__ a laquelle je voudrais pouvoir
passer des arguments


(snip)

je peux faire e.__str__(with_v2=True) me retournera la chaine en prennant en
compte V2, mais est-il possible de, et comment faire pour, specifier ceci lors
d'un appel a print ???


print e.__str__(with_v2=True) ?-)



--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"

Avatar
Hervé Cauwelier

je peux faire e.__str__(with_v2=True) me retournera la chaine en prennant en
compte V2, mais est-il possible de, et comment faire pour, specifier ceci lors
d'un appel a print ???


"print" appelle "str", et "str" n'accepte qu'un seul argument. Donc
c'est mort.

PS j'ai deja un wrapper autour de ceci via une methode de x.


Tu auras plus de chances à ce plus haut niveau, en plus de sûrement
faciliter la lecture et la maintenance de ton code.

N.B. Tu me donnes l'impression de t'embêter pour pas grand chose.

--
Hervé Cauwelier
http://www.oursours.net/

Avatar
Eric Deveaud
wrote:

Si je ne m'abuse, print utilise __repr__().


non print utilise __str__

__repr__ est utilisé pour produire une representation de l'objet telle que
eval(objet.__repr__()) permette de regénérer l'objet

Eric

Avatar
Laurent Pointal
comment faire pour, specifier ceci lors
d'un appel a print ???


Pas possible.

AMA

1-soit tu fait une méthode "pour ça" (autre que __str__)
2-soit tu ajoutes un membre with_v2 à ta classe, tu le testes dans
__str__, et tu le positionnes avant d'appeler print.

Perso, je préfère la solution 1, plus propre, plus simple à comprendre
et à lire.


A+

Laurent.

Avatar
Eric Deveaud
bruno at modulix wrote:
Eric Deveaud wrote:
Bonjour.

une question bete concernant la methode __str__ a laquelle je voudrais pouvoir
passer des arguments


(snip)

je peux faire e.__str__(with_v2=True) me retournera la chaine en prennant en
compte V2, mais est-il possible de, et comment faire pour, specifier ceci lors
d'un appel a print ???


print e.__str__(with_v2=True) ?-)


c'est ce que je voulais eviter ;-))

j'ai pris le cas de __str__, mais j'ai le même soucis pour pas mal de choses
tout une branche de mon code doit/ou ne doit pas tenir compte des clef sha1 de
mes objets.
je suis en train de plancher sur 2 voies
1) serie de methodes wrappant le méthode spéciales pour prendre en compte les
attributs a ignorer
2) une grosse pas belle variable glbale (ou de classe)

Eric

--
Linux, c'est simple : ça s'adresse à une machine qui est parfois un peu
maraboutée mais qui d'habitude n'a pas d'états d'âme. Sur Usenet y'a
plein d'humains et de primates, et ça devient vraiment gore par moment.
-+- TP in : Guide du linuxien pervers - "Le linuxien a-t-il une âme ?" -+-


Avatar
Eric Deveaud
Hervé Cauwelier wrote:

je peux faire e.__str__(with_v2=True) me retournera la chaine en prennant
en compte V2, mais est-il possible de, et comment faire pour, specifier
ceci lors d'un appel a print ???


"print" appelle "str", et "str" n'accepte qu'un seul argument. Donc
c'est mort.


et pouratnt le code que j'ai fourni en exemple est fonctionnel et sans erreur
de syntaxes

PS j'ai deja un wrapper autour de ceci via une methode de x.


Tu auras plus de chances à ce plus haut niveau, en plus de sûrement
faciliter la lecture et la maintenance de ton code.


je ne suis pas contre, mais le soucis c'est que j'ai des objets qui contiennent
entre autres attributs
une clef sha1
un attribut marqueur de redondance.
attributs que je veux pouvoir ignorer selon les cas lors de l'affichage et de la
comparaison

N.B. Tu me donnes l'impression de t'embêter pour pas grand chose.


c'est bien possible ;-)

Eric qui va retourner à la definition de ses objets .....


Avatar
Laurent Pointal
Hervé Cauwelier wrote:

je peux faire e.__str__(with_v2=True) me retournera la chaine en prennant
en compte V2, mais est-il possible de, et comment faire pour, specifier
ceci lors d'un appel a print ???
"print" appelle "str", et "str" n'accepte qu'un seul argument. Donc

c'est mort.


et pouratnt le code que j'ai fourni en exemple est fonctionnel et sans erreur
de syntaxes


Oui, parce que tu fournis une valeur par défaut à ton argument
supplémentaire de __str__, donc print peut l'utiliser. Par contre il n'y
a pas moyen de donner cet argument via l'appel à print.