我想知道为什么python魔术方法( str )总是在寻找return语句而不是print方法?
class test:
def __init__(self):
print("constructor called")
def __call__(self):
print("callable")
def __str__(self):
return "string method"
obj=test() ## print constructor called
obj() ### print callable
print(obj) ## print string method
我的问题是为什么我不能在 str 方法中使用这样的东西
def __str__(self):
print("string method")
答案 0 :(得分:4)
这更像是为了将对象转换为str
- 您的用户无需在想要执行此类操作时将所有内容打印到终端中
text = str(obj_instance)
他们希望text
包含结果,而不是打印到终端上。
按照自己的方式行事,代码实际上就是这个
text = print(obj_instance)
这有点荒谬,因为打印结果通常没用,text
不会包含传递到str
类型的文本流。
正如您已经评论过(但自删除后),不为返回值提供正确的类型将导致引发异常,例如:
>>> class C(object):
... def __str__(self):
... return None
...
>>> str(C())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __str__ returned non-string (type NoneType)
>>>
答案 1 :(得分:1)
因为当您__str__()
对象时使用print
,所以用户已经调用print
需要表示Object的String - 作为传递回用户的变量print
在上面提供的示例中,如果打印__str__
,您将获得:
print(obj)
翻译成:
print(print("string method"))