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

标签 python oop

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

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

感觉既然有其他更简洁的方法可以做到这一点,那么直接调用 __str__() 并不是一个好主意(或者至少,不是正确的风格)。也就是说,我找不到专门说不要这样做的网站。

最佳答案

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

对于__str__,有three documented uses ;它被内置函数 strformatprint 使用,因此(粗略地说)

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

这里的关键是 __str__ 允许 不是 内置到 Python 中的代码使用这些函数; __str__ 方法提供了所有三个都可以使用的通用接口(interface)。

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

相关文章:

python - python 3.1 中的测试驱动开发

php - 使用 PHPUnit 进行单元或集成测试(私有(private)方法依赖项)

multithreading - 作品。传回一个变量

java - ArrayList和多态性

c++ - 类私有(private)成员 - 数组访问失败

php - 错误的 OO 架构、共享对象和依赖项?也许我在这里缺少设计模式?

python - ValueError : could not broadcast input array from shape (11253, 1) 进入形状 (11253)

python - 将异常主体存储在变量中

python - 卢卡斯概率素数检验

python - Numpy 和 OpenCV