Quand je veux afficher ses coordonnées, j'ai la méthode "Affiche" qui
affiche les coordonnées :
V = vecteur(1,2)
V.Affiche()
donne le résultat escompté : (1,2).
De temps en temps, je voudrais afficher non seulement les coordonnées,
mais en plus un nom. C'est à ça que sert la méthode "nom" de la méthode
"Affiche"
Hélas,
V.Affiche().nom("A")
donne une erreur relativement prévisible :
AttributeError: 'NoneType' object has no attribute 'nom'
J'ai essayé pas mal de combinaisons. J'ai même essayé de faire de
Affiche une sous-classe de la classe vecteur, mais je me suis perdu en
mélanges de __init__ et de self.
Est-ce qu'il y a un moyen de faire en sorte que
V.Affiche()
donne "(1,2)"
et
V.Affiche().nom("A")
donne "(1,2) est le vecteur A"
??
En fin de compte, je suis parvenu à ceci :
#! /usr/bin/python
# -*- coding: utf8 -*-
class vecteur(object):
class _Affiche(object):
def __init__(self,vect):
self.vect = vect
print "("+str(self.vect.x)+","+str(self.vect.y)+")"
def nom(self,nom):
print " est le vecteur "+nom
print "et encore : "
self.vect.Affiche()
def __init__(self,x,y):
self.x = x
self.y = y
def Affiche(self):
return self._Affiche(self)
V = vecteur(1,2)
V.Affiche()
V.Affiche().nom("A")
Cela fait ce que je veux, mais j'ai des doutes quant à la pythonicité de
l'idée.
En particulier, je ne pourrais pas, de cette manière, faire en sorte que
V.Affiche() n'affiche pas (1,2), mais à la place *retourne* la chaine
"(1,2)".
Quand je veux afficher ses coordonnées, j'ai la méthode "Affiche" qui affiche les coordonnées :
V = vecteur(1,2) V.Affiche()
donne le résultat escompté : (1,2).
De temps en temps, je voudrais afficher non seulement les coordonnées, mais en plus un nom. C'est à ça que sert la méthode "nom" de la méthode "Affiche"
Hélas, V.Affiche().nom("A") donne une erreur relativement prévisible : AttributeError: 'NoneType' object has no attribute 'nom'
J'ai essayé pas mal de combinaisons. J'ai même essayé de faire de Affiche une sous-classe de la classe vecteur, mais je me suis perdu en mélanges de __init__ et de self.
Est-ce qu'il y a un moyen de faire en sorte que V.Affiche() donne "(1,2)" et V.Affiche().nom("A") donne "(1,2) est le vecteur A"
??
En fin de compte, je suis parvenu à ceci :
#! /usr/bin/python # -*- coding: utf8 -*-
class vecteur(object):
class _Affiche(object): def __init__(self,vect): self.vect = vect print "("+str(self.vect.x)+","+str(self.vect.y)+")"
def nom(self,nom): print " est le vecteur "+nom print "et encore : " self.vect.Affiche()
def __init__(self,x,y): self.x = x self.y = y
def Affiche(self): return self._Affiche(self)
V = vecteur(1,2) V.Affiche() V.Affiche().nom("A")
Cela fait ce que je veux, mais j'ai des doutes quant à la pythonicité de l'idée. En particulier, je ne pourrais pas, de cette manière, faire en sorte que V.Affiche() n'affiche pas (1,2), mais à la place *retourne* la chaine "(1,2)".
Merci si vous avez des avis Bonne aprème Laurent
Tu peux essayer ça :
class Vecteur (object):
def __init__ (self,x,y,nom):
self.x = x
self.y = y
seld.nom = nom
Quand je veux afficher ses coordonnées, j'ai la méthode "Affiche" qui
affiche les coordonnées :
V = vecteur(1,2)
V.Affiche()
donne le résultat escompté : (1,2).
De temps en temps, je voudrais afficher non seulement les coordonnées,
mais en plus un nom. C'est à ça que sert la méthode "nom" de la méthode
"Affiche"
Hélas,
V.Affiche().nom("A")
donne une erreur relativement prévisible :
AttributeError: 'NoneType' object has no attribute 'nom'
J'ai essayé pas mal de combinaisons. J'ai même essayé de faire de
Affiche une sous-classe de la classe vecteur, mais je me suis perdu en
mélanges de __init__ et de self.
Est-ce qu'il y a un moyen de faire en sorte que
V.Affiche()
donne "(1,2)"
et
V.Affiche().nom("A")
donne "(1,2) est le vecteur A"
??
En fin de compte, je suis parvenu à ceci :
#! /usr/bin/python
# -*- coding: utf8 -*-
class vecteur(object):
class _Affiche(object):
def __init__(self,vect):
self.vect = vect
print "("+str(self.vect.x)+","+str(self.vect.y)+")"
def nom(self,nom):
print " est le vecteur "+nom
print "et encore : "
self.vect.Affiche()
def __init__(self,x,y):
self.x = x
self.y = y
def Affiche(self):
return self._Affiche(self)
V = vecteur(1,2)
V.Affiche()
V.Affiche().nom("A")
Cela fait ce que je veux, mais j'ai des doutes quant à la pythonicité de
l'idée.
En particulier, je ne pourrais pas, de cette manière, faire en sorte que
V.Affiche() n'affiche pas (1,2), mais à la place *retourne* la chaine
"(1,2)".
Quand je veux afficher ses coordonnées, j'ai la méthode "Affiche" qui affiche les coordonnées :
V = vecteur(1,2) V.Affiche()
donne le résultat escompté : (1,2).
De temps en temps, je voudrais afficher non seulement les coordonnées, mais en plus un nom. C'est à ça que sert la méthode "nom" de la méthode "Affiche"
Hélas, V.Affiche().nom("A") donne une erreur relativement prévisible : AttributeError: 'NoneType' object has no attribute 'nom'
J'ai essayé pas mal de combinaisons. J'ai même essayé de faire de Affiche une sous-classe de la classe vecteur, mais je me suis perdu en mélanges de __init__ et de self.
Est-ce qu'il y a un moyen de faire en sorte que V.Affiche() donne "(1,2)" et V.Affiche().nom("A") donne "(1,2) est le vecteur A"
??
En fin de compte, je suis parvenu à ceci :
#! /usr/bin/python # -*- coding: utf8 -*-
class vecteur(object):
class _Affiche(object): def __init__(self,vect): self.vect = vect print "("+str(self.vect.x)+","+str(self.vect.y)+")"
def nom(self,nom): print " est le vecteur "+nom print "et encore : " self.vect.Affiche()
def __init__(self,x,y): self.x = x self.y = y
def Affiche(self): return self._Affiche(self)
V = vecteur(1,2) V.Affiche() V.Affiche().nom("A")
Cela fait ce que je veux, mais j'ai des doutes quant à la pythonicité de l'idée. En particulier, je ne pourrais pas, de cette manière, faire en sorte que V.Affiche() n'affiche pas (1,2), mais à la place *retourne* la chaine "(1,2)".
Merci si vous avez des avis Bonne aprème Laurent
NicolasP
Bonjour,
moky a écrit :
Bonjour
J'ai une classe vecteur définie ainsi :
class vecteur(object): def __init__(self,x,y): self.x = x self.y = y
Quand je veux afficher ses coordonnées, j'ai la méthode "Affiche" qui affiche les coordonnées :
V = vecteur(1,2) V.Affiche()
donne le résultat escompté : (1,2).
De temps en temps, je voudrais afficher non seulement les coordonnées, mais en plus un nom. C'est à ça que sert la méthode "nom" de la méthode "Affiche"
Hélas, V.Affiche().nom("A") donne une erreur relativement prévisible : AttributeError: 'NoneType' object has no attribute 'nom'
J'ai essayé pas mal de combinaisons. J'ai même essayé de faire de Affiche une sous-classe de la classe vecteur, mais je me suis perdu en mélanges de __init__ et de self.
Est-ce qu'il y a un moyen de faire en sorte que V.Affiche() donne "(1,2)" et V.Affiche().nom("A") donne "(1,2) est le vecteur A"
??
Attention, l'instruction print génère un retour à la ligne suivante. Donc, l'enchainement des 2 fonctions génèrerait un affichage sur 2 lignes.
Pourquoi pas ça ? :
class vecteur(object): def __init__(self,x,y): self.x = x self.y = y
def Affiche(self, nom=""): if nom : n = "est le vecteur %s" % nom else : n = "" print "(%d,%d) %s" % (self.x, self.y, n)
V = vecteur(1,2) V.Affiche() donne "(1,2)" V.Affiche("A") donne "(1,2) est le vecteur A"
C'est plus simple et c'est pythonesque.
Comme tu peux le voir, j'ai remplacé "("+str(self.x)+","+str(self.y)+")" par "(%d,%d)" % (self.x, self.y)
Accessoirement, j'ai modifié le tout pour obtenir le résultat que tu désires.
C'est plus simple à lire et plus pythonesque.
Nicolas
Bonjour,
moky a écrit :
Bonjour
J'ai une classe vecteur définie ainsi :
class vecteur(object):
def __init__(self,x,y):
self.x = x
self.y = y
Quand je veux afficher ses coordonnées, j'ai la méthode "Affiche" qui
affiche les coordonnées :
V = vecteur(1,2)
V.Affiche()
donne le résultat escompté : (1,2).
De temps en temps, je voudrais afficher non seulement les coordonnées,
mais en plus un nom. C'est à ça que sert la méthode "nom" de la méthode
"Affiche"
Hélas,
V.Affiche().nom("A")
donne une erreur relativement prévisible :
AttributeError: 'NoneType' object has no attribute 'nom'
J'ai essayé pas mal de combinaisons. J'ai même essayé de faire de
Affiche une sous-classe de la classe vecteur, mais je me suis perdu en
mélanges de __init__ et de self.
Est-ce qu'il y a un moyen de faire en sorte que
V.Affiche()
donne "(1,2)"
et
V.Affiche().nom("A")
donne "(1,2) est le vecteur A"
??
Attention, l'instruction print génère un retour à la ligne suivante.
Donc, l'enchainement des 2 fonctions génèrerait un affichage sur 2 lignes.
Pourquoi pas ça ? :
class vecteur(object):
def __init__(self,x,y):
self.x = x
self.y = y
def Affiche(self, nom=""):
if nom :
n = "est le vecteur %s" % nom
else :
n = ""
print "(%d,%d) %s" % (self.x, self.y, n)
V = vecteur(1,2)
V.Affiche()
donne "(1,2)"
V.Affiche("A")
donne "(1,2) est le vecteur A"
C'est plus simple et c'est pythonesque.
Comme tu peux le voir, j'ai remplacé
"("+str(self.x)+","+str(self.y)+")"
par
"(%d,%d)" % (self.x, self.y)
Accessoirement, j'ai modifié le tout pour obtenir le résultat que tu désires.
Quand je veux afficher ses coordonnées, j'ai la méthode "Affiche" qui affiche les coordonnées :
V = vecteur(1,2) V.Affiche()
donne le résultat escompté : (1,2).
De temps en temps, je voudrais afficher non seulement les coordonnées, mais en plus un nom. C'est à ça que sert la méthode "nom" de la méthode "Affiche"
Hélas, V.Affiche().nom("A") donne une erreur relativement prévisible : AttributeError: 'NoneType' object has no attribute 'nom'
J'ai essayé pas mal de combinaisons. J'ai même essayé de faire de Affiche une sous-classe de la classe vecteur, mais je me suis perdu en mélanges de __init__ et de self.
Est-ce qu'il y a un moyen de faire en sorte que V.Affiche() donne "(1,2)" et V.Affiche().nom("A") donne "(1,2) est le vecteur A"
??
Attention, l'instruction print génère un retour à la ligne suivante. Donc, l'enchainement des 2 fonctions génèrerait un affichage sur 2 lignes.
Pourquoi pas ça ? :
class vecteur(object): def __init__(self,x,y): self.x = x self.y = y
def Affiche(self, nom=""): if nom : n = "est le vecteur %s" % nom else : n = "" print "(%d,%d) %s" % (self.x, self.y, n)
V = vecteur(1,2) V.Affiche() donne "(1,2)" V.Affiche("A") donne "(1,2) est le vecteur A"
C'est plus simple et c'est pythonesque.
Comme tu peux le voir, j'ai remplacé "("+str(self.x)+","+str(self.y)+")" par "(%d,%d)" % (self.x, self.y)
Accessoirement, j'ai modifié le tout pour obtenir le résultat que tu désires.