我应该直接调用 object.__str__() 吗?

Ben*_*per 5 python oop

我正在用 Python 编写一个类,我正在编写一个__str__()函数,以便我的打印语句可以打印该类实例的字符串表示。有没有理由直接做这样的事情:

myObj = Foo(params)
doSomething(myObj.__str__())
Run Code Online (Sandbox Code Playgroud)

感觉因为有其他更简洁的方法可以做到这一点,直接调用__str__(). 也就是说,我找不到专门说不要的网站。

che*_*ner 5

一般来说,dunder 方法定义对象在特定上下文中的行为方式。它们不适合直接使用。(主要的例外是当您重写从父类继承的 dunder 方法时。)

在这种情况下__str__,有三种记录的用途;它由内置函数strformat、 等使用print(粗略地说)

  1. str(myObj) == myObj.__str__()
  2. format("{}", myObj) == format("{}", myObj.__str__())
  3. print(myObj) == print(myObj.__str__())

这里的关键是允许__str__Python 内置的代码使用这些函数;该方法提供了三个都可以使用的通用接口。__str__