python中的__str__方法

时间:2014-08-27 03:47:13

标签: python python-3.x

我想知道为什么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")

2 个答案:

答案 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"))