Python 为什么打印(“字符串”,对象)会给出与打印(对象)不同的结果?

Python 为什么打印(“字符串”,对象)会给出与打印(对象)不同的结果?,python,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) 两种情况下打印(“点”,p1)和打印(p1)之间的区别是什么: p1=点(1,2) 打印(“点”,p1) 打印(p1) >>(‘点’,)

我定义了这个类:

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)
两种情况下打印(“点”,p1)和打印(p1)之间的区别是什么:

p1=点(1,2)
打印(“点”,p1)
打印(p1)
>>(‘点’,)
>>点x:1,点y:2

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

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

所以在您的例子中,在python2.x中,您打印的是一个值的元组。Tuple Tuple对象将转换为字符串,Tuple中的每个值都将打印其表示形式。当您按以下方式打印它们:
打印“点”,p1
,则每个项目都将转换为字符串并打印

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

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

前者打印一个元组,其中包含
“点”
p1
;在这种情况下,将使用
\uu repr\uuu()
来生成输出字符串,而不是
\uu str\uuu()

,但是,如果它在Python 3上,则会有所不同。或者如果使用了“打印功能”功能。。看看为什么当我们有_str__()时打印p1会有区别,因为序列不打印元素的字符串值,而是打印表示。
print str(p1)
# Point x: 1, Point y: 2

print repr(p1)
# <__main__.Point instance at 0x00D96F80>
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)