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

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

我们将一个字符串 'Python with i2tutorials' 传给了变量 a。 我们可以看到,这两个函数在被调用时都返回了相应的字符串,但 repr() 函数在其中加入了引号。这是字符串的正式表示法,而 str() 给出的是字符串的非正式表示法。
正式表示法为 信息增加了很多价值和很多细节,这对开发者在调试时很有帮助。
非正式表示法的 目的是为用户增加输出的可读性。我们可以通过下面的例子来理解这一点。

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

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