5

我已经定义了这个类:

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)

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
4

2 回答 2

12

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

于 2012-08-18T01:52:03.993 回答
6

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

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

在 python3 中,您必须像函数调用一样进行操作print(1,2,3)

因此,在您的情况下,在 python2.x 中,您要打印的是一组值。Tuple 元组对象将被转换为字符串,并且元组中的每个值都将打印其表示形式。当您像这样打印它们时: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)
于 2012-08-18T01:51:58.947 回答