【发布时间】:2021-10-12 08:18:47
【问题描述】:
我正在尝试理解 Python 中的 __str__ 方法。
class Test:
def __str__(self):
return 5
t = Test()
print(t.__str__())
在这个方法中它返回一个整数值,但是 print 方法可以打印它。
但是,当我尝试print(t) 时,它抛出了错误TypeError: __str__ returned non-string (type int)。
据我了解,print(t) 也在调用__str__(self) 方法。
为什么print(t.__str__())不想要字符串类型转换?
【问题讨论】:
-
print(t.__str__())避免了错误,因为它在显式调用方法后变为print(5)。 -
而
print(t)返回错误的原因与str(t)相同。由于__str__()的错误实现,您无法从t中创建字符串(因为print()必须输出其值)。 -
在某种程度上,这并不重要:它是依赖于实现的未定义行为。
__str__方法记录了“[其]返回值必须是字符串对象”。 -
今天,
t.__str__()可以愉快地返回一个非str的值;明天,它可能会引发异常,这不会是一个重大变化,因为语言从未定义如果__str__不返回字符串会发生什么。 -
(以
__init__:它是一个TypeError来返回除None之外的任何值,尽管我隐约记得它曾经是合法的,即使对象期间隐式调用的任何返回值创建将被忽略。)
标签: python type-conversion typeerror magic-methods