【发布时间】:2018-09-11 16:08:59
【问题描述】:
我知道,str() 方法的目的是返回一个对象的字符串表示,所以我想测试如果我强迫它做别的东西会发生什么。
我已经创建了一个类和一个对象:
class MyClass(object):
def __str__(self, a=2, b=3):
return a + b
mc = MyClass()
当我打电话时:
print(str(mc))
口译员抱怨:
TypeError: __str__ returned non-string (type int)
这是完全可以理解的,因为 str() 方法试图返回 int。
但如果我尝试:
print(mc.__str__())
我得到输出:5。
那么为什么解释器允许我在我直接调用 __str__ 时返回 int,但当我使用 str(mc) 时不允许我返回 - 据我所知 - 也被评估为 mc.__str__()。
【问题讨论】:
-
我也有兴趣了解原因
-
您可能会发现此链接有用! stackoverflow.com/questions/12448175/…
-
str函数确实 调用__str__,但它也强制执行str返回类型。这不仅仅是直接调用__str__ -
因此这算作文档遗漏吗?根据文档,
str(带有单个参数)只是调用__str__——它没有提及检查类型。 -
@Denziloe 很好,在data model docs 中确实声明
__str__必须返回str。
标签: python string cpython python-internals