我定义了这个类:
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
答案 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)