gpt4 book ai didi

Python __str__ - 它会含糊不清吗?

转载 作者:行者123 更新时间:2023-12-04 08:16:28 25 4
gpt4 key购买 nike

可以 __str__从字面上返回任何我的灵魂想要的东西?
__str__ 上的文档状态:

[...] the “informal” or nicely printable string representation of an object


应该如何解读呢?
  • A. 只要在我看来它代表对象,它就可以返回任何东西。
  • B. 它应该返回对象的明确表示,尽管它可以按照我喜欢的任何方式进行格式化。

  • A的例子:
    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
    几乎我找到的所有资源( 123456 )都表明输出 - 虽然它可以是含糊不清的和明确的 - 应该是明确和明确的有意义: Explicit is better than implicit., Readability counts. In the face of ambiguity, refuse the temptation to guess. )。
    然而,有一些人认为,鉴于文档中的“非正式”一词,人们实际上可能是模棱两可且含蓄的( 12 )。我找到了一位开发人员同行,他说可以使用 __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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com