我正在用 Python 编写一个类,并且正在编写一个 __str__()
函数,因此我的打印语句可以打印该类实例的字符串表示形式。有没有理由直接做这样的事情:
myObj = Foo(params)
doSomething(myObj.__str__())
感觉既然有其他更简洁的方法可以做到这一点,那么直接调用 __str__()
并不是一个好主意(或者至少,不是正确的风格)。也就是说,我找不到专门说不要这样做的网站。
最佳答案
通常,dunder 方法定义对象在特定上下文中的行为方式。它们不打算直接使用。 (主要的异常(exception)是当您重写从父类继承的 dunder 方法时。)
对于__str__
,有three documented uses ;它被内置函数 str
、format
和 print
使用,因此(粗略地说)
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/