我知道,str()方法的目的是返回一个对象的字符串表示,所以我想测试如果我强迫它做其他事情会发生什么.
我创建了一个类和一个对象:
class MyClass(object):
def __str__(self, a=2, b=3):
return a + b
mc = MyClass()
Run Code Online (Sandbox Code Playgroud)
我打电话的时候:
print(str(mc))
Run Code Online (Sandbox Code Playgroud)
口译员抱怨说:
TypeError: __str__ returned non-string (type int)
Run Code Online (Sandbox Code Playgroud)
这是完全可以理解的,因为str()方法试图返回int.
但如果我尝试:
print(mc.__str__())
Run Code Online (Sandbox Code Playgroud)
我得到输出:5.
那么为什么解释器允许我在__str__直接调用时返回int ,而不是当我使用str(mc)时 - 正如我所理解的那样 - 也被评估为mc.__str__().