和...之间的不同
这个问题在这里已经有了答案:
__str__
和__repr__
都是获取对象的字符串表示的方法。 __str__
应该更短,更方便用户,而__repr__
应该提供更多的细节。
具体而言,对于许多数据类型, __repr__
返回一个字符串,如果您将其粘贴回Python,它将是一个有效的表达式,其值将等于原始值。 例如, str('Hello')
返回'Hello'
,但repr('Hello')
返回"'Hello'"
,在字符串中带有引号。 如果你打印出这个字符串,你会得到'Hello'
,如果你把它粘贴回Python,你会得到原始字符串。
一些数据类型,如文件对象,不能以这种方式转换为字符串。 这些对象的__repr__
方法通常会在尖括号中返回一个包含对象数据类型和内存地址的字符串。 如果您没有专门定义__repr__
方法,用户定义的类也会这样做。
当您在REPL中计算一个值时,Python会调用__repr__
将其转换为字符串。 但是,当您使用print
时,Python会调用__str__
。
当你调用print((Item("Car"),))
,你调用了tuple
类的__str__
方法,这和__repr__
方法相同。 该方法的工作原理是调用元组中每个__repr__
方法,并用逗号将它们连接在一起(加上一个__repr__
元组的__repr__
),并用括号括__repr__
整个事物。 我不知道为什么tuple
的__str__
方法不会在其内容上调用__str__
,但它不会。