Python 中在__str__和__repr__之间有什么区别?

217 阅读1分钟

在 Python 中,对象类有许多 神奇的方法(以双下划线开头和结尾的方法)。我们从不直接调用这些方法。一个相应的内置函数会在内部调用这些神奇的方法之一。 在这篇文章中,让我们坚持使用 strrepr 。所以内置的 str() 函数调用了 __str__() 魔法方法,内置的 repr() 函数调用了 __repr__() 魔法方法。

这两个函数都给出了一个字符串的表示方法。

现在让我们看看对于相同的功能,两个不同的函数有什么用。请看下面的例子。

我们将一个字符串 'Python with i2tutorials' 传给了变量 a。 我们可以看到,这两个函数在被调用时都返回了相应的字符串,但 repr() 函数在其中加入了引号。这是字符串的正式表示法,而 str() 给出的是字符串的非正式表示法。

正式表示法为 信息增加了很多价值和很多细节,这对开发者在调试时很有帮助。

非正式表示法的 目的是为用户增加输出的可读性。我们可以通过下面的例子来理解这一点。

让我们让这些函数为我们自己定义的类 A 和一个对象 a工作 。

注意: 我们决不能直接使用这些函数,我们 应该总是使用 str()repr() 函数,它们将调用底层的 __str__()__repr__() 函数。