Python 普通法或肾盂法

Python 普通法或肾盂法,python,python-3.x,repr,Python,Python 3.x,Repr,我通常写一个\uuuu repr\uuuu来展示如何首先重新创建实例。例如: 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})' 是否有

我通常写一个
\uuuu repr\uuuu
来展示如何首先重新创建实例。例如:

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})'

是否有编写
\uuuu repr\uuuuuu
的“标准”方法,如果没有,是否有关于如何编写的建议选项/最佳实践,或者完全是主观的?

如果可能的话,一般规则是:

如果可能的话,这应该看起来像一个有效的Python表达式,可以用来重新创建具有相同值的对象(给定适当的环境)。若不可能,则应返回表单的字符串

这条规则的第二部分主要是为了确保你不会做一些看起来像是一个规范的重建报告;在实践中,我没有看到它被宗教所遵循

对于您的具体情况,我只推荐两种调整:

  • 如果一个
    组件
    可能包含另一个
    组件
    作为
    开始
    结束
    值,则用装饰
    报告
    以避免在
    组件
    包含自身的情况下出现无限递归的可能性(对于图书馆来说很重要,无论图书馆作者的意图如何,这种情况都可能发生)
  • 显式使用属性的
    repr
    !r
    修饰符(您不需要“人性化”字符串,您需要的是表示),将字符串更改为:

    return f'{self.__class__.__name__}(start={self.start!r}, end={self.end!r})'
    
  • ,