我刚看到这个问题Python中
__str__
和__repr__
的区别,其中提到__repr__
的主要目的是不含歧义。但我听说__repr__
的主要目的是生成一个字符串,以便之后eval()
可以重构Python对象。实际上,__repr__
的主要目的是什么?Python内置函数或默认模块是否本质上使用__repr__
来重构对象?如果我们只覆盖__repr__
使其始终返回常量字符串(例如“foo”),是否会破坏执行?
__str__()
是为了用户设计的,而__repr__()
则是为了开发者设计的。 - Gareth Latty__repr__
和eval
之间的关系,而这似乎是问题所在。如果你在不覆盖__repr__
的情况下使用eval
,你可能会得到SyntaxError: invalid syntax
错误,就像我现在遇到的一样。实际上,eval
需要一个表达式,如果你某个类的对象不能转换为表达式,那么你就会得到这个语法错误。这就是为什么__repr__
也是必需的,因此它不仅仅用于调试目的。 - nbro__repr__
的目的是什么。没有其他关系,如果类型返回一个与创建对象语法匹配的字符串,则将其传递给eval()
将起作用,但这不是一个具体的要求。 - Martijn Pieters