作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
可以 __str__
从字面上返回任何我的灵魂想要的东西?
__str__ 上的文档状态:
[...] the “informal” or nicely printable string representation of an object
class Vehicle:
def __init__(self, owner):
self.owner = owner
self.wheels = 4
def __str__(self):
return "%s with %s wheels" % (self.owner, self.wheels)
print(Vehicle('Benjamin'))
>>> Benjamin with 4 wheels
B的例子:
class Vehicle:
def __init__(self, owner):
self.owner = owner
self.wheels = 4
def __str__(self):
return "Vehicle, owner is %s, with %s wheels" % (self.owner, self.wheels)
print(Vehicle('Benjamin'))
>>> Vehicle, owner is Benjamin, with 4 wheels
几乎我找到的所有资源(
1 、
2 、
3 、
4 、
5 、
6 )都表明输出 - 虽然它可以是含糊不清的和明确的 - 应该是明确和明确的有意义:
Explicit is better than implicit., Readability counts. In the face of ambiguity, refuse the temptation to guess. )。
__str__
中对象的任何表示形式。 ,以及
__repr__
用于明确和明确的表示。我想了解他们的观点,但找不到任何支持他们案子的理由。您能否建议人们应该如何解释该文档并支持您的推理?
最佳答案
问题是如何使用这些东西。作为如何使用 __str__
的示例,请查看 Django's admin interface 。只需注册一个模型类,它就会围绕它生成一个功能齐全的管理界面。默认情况下,在此类模型对象的列表中,对象使用它们的 __str__
表示(这可以进一步定制,但这是合理的默认值)。因此,__str__
应该返回一个在管理界面中有意义的表示。它不应该太冗长,它不应该是一个句子,但它应该唯一标识对象。
因此,如何以有用的方式唯一标识对象取决于它到底是什么以及您的应用程序。假设您有一个博客应用程序,那么为了识别其中的每篇文章,以下内容可能最有用:
def __str__(self):
return f'{self.id} — {self.title}'
这真的取决于您和您的用例,但大多数情况下它应该对人类有用。
__str__
表示没有编程用途,因此 Python 并不特别关心或规定它必须遵守的任何特定格式。
__repr__
应该,如果可能的话,返回一个允许你重建确切对象的文字。这主要是针对开发人员的,可以极大地帮助调试。如果你做类似
print(things)
的事情并得到这个:
[<__main__.Thing object at 0x818745692312>]
这只会给你最少的信息,而不是更多。如果您自定义
__repr__
:
def __repr__(self):
return f'{type(self).__name__}(foo={self.foo!r})'
……您的列表现在打印如下:
[Thing(foo='bar')]
现在,您可以将其直接复制粘贴到 Python shell 中,并进一步使用它来重现问题并进一步调试。这就是它的用途,正确使用它可以简化您的开发。
关于Python __str__ - 它会含糊不清吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65678499/
我是一名优秀的程序员,十分优秀!