为什么print(“string”,object)给出的结果与print(object)不同?

时间:2012-08-18 01:49:53

标签: python

我定义了这个类:

class Point():
    def __init__(self,x,y):
        self.x = x
        self.y = y
    def __str__(self):
        return "Point x: {0}, Point y: {1}".format(self.x, self.y)

2个案例print("Point",p1)print(p1)之间有什么区别:

p1 = Point(1,2)
print("Point",p1)
print(p1)

>>('Point', <__main__.Point instance at 0x00D96F80>)
>>Point x: 1, Point y: 2

2 个答案:

答案 0 :(得分:12)

前者正在打印包含"Point"p1的元组;在这种情况下,__repr__()将用于生成输出字符串,而不是__str__()

答案 1 :(得分:6)

如果您使用的是python2.x,那么您认为打印就像函数一样,您实际上是使用print关键字打印元组...

print(1,2,3)
print (1,2,3)

在python3中,你必须像函数调用print(1,2,3)一样。

所以在你的情况下,在python2.x中,你打印的是一组值。元组元组对象将转换为字符串,元组中的每个值都将打印其表示。当您将其打印为print "Point",p1时,每个项目都将转换为字符串并打印。

print str(p1)
# Point x: 1, Point y: 2

print repr(p1)
# <__main__.Point instance at 0x00D96F80>

您实际上可能想要使用__repr__而不是__str__

class Point():
    def __init__(self,x,y):
        self.x = x
        self.y = y
    def __repr__(self):
        return "Point x: {0}, Point y: {1}".format(self.x, self.y)