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

myObj = Foo(params)
doSomething(myObj.__str__())

感觉好像因为还有其他更整洁的方法可以做到这一点,所以直接调用__str__()是一个坏主意(或者至少是不合适的风格)。就是说,我找不到专门拒绝这样做的网站。

最佳答案

通常,dunder方法定义对象在特定上下文中的行为。它们不打算直接使用。 (主要的异常(exception)是当您覆盖从父类继承的dunder方法时。)

__str__的情况下,有three documented uses;内置函数strformatprint使用它,因此(大致而言)

  • str(myObj) == myObj.__str__()
  • format("{}", myObj) == format("{}", myObj.__str__())
  • print(myObj) == print(myObj.__str__())

  • 这里的关键是__str__允许Python内置的代码无法使用这些功能。 __str__方法提供了三个都可以使用的通用接口(interface)。

    关于python - 我应该直接调用object .__ str __()吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49696701/

    10-12 23:18