和...之间的不同
这个问题在这里已经有了答案:
__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__ ,但它不会。
