gpt4 book ai didi

python - 通用或pythonic __repr__ 方法

转载 作者:行者123 更新时间:2023-12-03 23:31:07 26 4
gpt4 key购买 nike

我通常写一个__repr__作为展示如何首先重新创建实例的一种方式。例如:

class Component:
def __init__(self, start, end):
self.start = start
self.end = end
def __repr__(self):
return f'{self.__class__.__name__}(start={self.start}, end={self.end})'

是否有一种“标准”的方式来编写 __repr__ ,如果没有,是否有建议的选项/最佳实践应该如何编写,或者它完全是主观的?

最佳答案

一般规则是,如果可能的话,produce output that could be typed to recreate the object; from the docs :

If at all possible, this should look like a valid Python expression that could be used to recreate an object with the same value (given an appropriate environment). If this is not possible, a string of the form <...some useful description...> should be returned.



该规则的第二部分主要是为了确保您不会制作看起来像规范的重新创建代表的东西;在实践中,我没有看到它虔诚地遵循。

对于您的具体情况,我只推荐两个调整:
  • 如果 Component可能包含另一个 Component作为 startend值,装修__repr__ reprlib.recursive_repr 避免在 Component 的情况下无限递归的可能性包含自身(对于图书馆很重要,无论图书馆作者的意图如何,这都可能发生)
  • 显式使用 repr您的属性与 !r修饰符(您不想要“人类友好”字符串,您想要一个表示形式),将字符串更改为:
    return f'{self.__class__.__name__}(start={self.start!r}, end={self.end!r})'
  • 关于python - 通用或pythonic __repr__ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59959540/

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