2017-09-28 4 views
1

J'essaie d'obtenir mon code pour afficher les résultats de tout code sur mon terminal, mais je n'arrive pas à trouver pourquoi il ne sera pas imprimé. Je suis en train d'apprendre à coder donc j'ai trouvé beaucoup d'explications sur ce site un peu confus, alors excuses si cela a déjà été demandé. Ceci est mon fichier python python.py:Impression de données du programme python au terminal sur mac

class point(object): 

    def __init__(self, x, y): 

     self.x = float(x); 
     self.y = float(y); 

    def __str__(self): 

     return("(" + self.x + "," + self.y + ")") 


def main(): 

    first = point(2,3) 


if __name__ == '__main__': 
    main() 

et dans le terminal que je suis juste en tapant « python.py python »

+1

Il suffit de mettre l'impression. c'est-à-dire pour imprimer salut mettre "impression" salut "' – Scriptable

+0

Le terminal dans mac –

Répondre

0

Comme d'autres l'ont mentionné, vous devez ajouter un appel d'impression() dans votre fonction principale afin d'obtenir une sortie à la borne. En outre, quelques autres choses à noter: Python ne nécessite pas de point-virgule, donc ils ne sont pas nécessaires dans votre méthode __init __() et vous ne pouvez pas implicitement convertir des floats en chaînes, vous devez donc être explicite dans votre __str__() méthode.

class point(object): 
    def __init__(self, x, y): 
     self.x = float(x) 
     self.y = float(y) 

    def __str__(self): 
     # explicitly cast floats to strings 
     return "(" + str(self.x) + "," + str(self.y) + ")" 

def main(): 
    first = point(2,3) 
    print(first) 

if __name__ == '__main__': 
    main() 

En outre, comme MrTrustworthy a souligné, vous n'avez pas besoin d'appeler la classe .__ __ str() directement imprimer appelle d'abord la méthode __str __() associée à la classe. S'il n'y a pas une telle méthode et que la conversion implicite échoue, alors vous obtiendrez la représentation de la fonction appelante et de l'adresse en mémoire.

Si vous supprimez __str __() de votre exemple, vous devriez obtenir une sortie comme ceci: <__main__.point object at 0x7f184cec4b70> si vous essayez d'imprimer l'objet.

1

Ajoutez une instruction d'impression dans la fonction principale() pour imprimer à la borne :

class point(object): 

def __init__(self, x, y): 

    self.x = float(x); 
    self.y = float(y); 

def __str__(self): 

    return("(" + self.x + "," + self.y + ")") 


def main(): 

    first = point(2,3) 
    print(first) 


if __name__ == '__main__': 
    main() 
+0

pourquoi ne dois-je pas imprimer "first .__ str__"? n'est-ce pas le seul moyen d'utiliser "__str__"? –

+0

d'abord .__ str__ pointe simplement vers la fonction que vous avez définie pour l'objet "point". Cette fonction, lorsqu'elle est appelée, renvoie une chaîne décrivant votre objet. Si vous utilisez la fonction "print()", python essayera automatiquement de faire une représentation sous forme de chaîne de votre objet à imprimer, sinon la sortie ne sera pas lisible par l'homme dans la plupart des cas. La fonction d'impression appellera donc la fonction __str __() elle-même dans les coulisses. Vous pouvez aussi utiliser print (first .__ str __()) vous-même, mais vous ne devez pas (et n'oubliez pas les parenthèses). – MrTrustworthy