【问题标题】:Why can print("string", object) give different results than print(object)?为什么 print("string", object) 给出的结果与 print(object) 不同?
【发布时间】:2012-08-18 01:49:53
【问题描述】:

我已经定义了这个类:

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

【问题讨论】:

    标签: python


    【解决方案1】:

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

    【讨论】:

    • 不过,如果它在 Python 3 上,情况会有所不同。或者如果使用“print_function”未来.. 见stackoverflow.com/questions/6182964/…
    • 当我们有__str__()时为什么打印p1会有差异
    • 因为序列不打印其元素的字符串值,它们打印表示。
    【解决方案2】:

    如果你使用的是 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)
    

    【讨论】:

      猜你喜欢
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 2021-12-16
      • 2011-04-17
      相关资源
      最近更新 更多