代码之家  ›  专栏  ›  技术社区  ›  MAA

repr的不同实现[关闭]

  •  -2
  • MAA  · 技术社区  · 7 年前

    import reprlib
    
    class Test:
        def __init__(self, aList):
            self.my_list = [c for c in aList]
    
        def __repr__(self):
    #         return " ".join((str(i) for i in self.my_list))
    #         return reprlib.repr(self.my_list)
    #         return repr(self.my_list)  # builtin repr method
            return str(self.my_list)
    

    x = [2, 5, 11]
    t = Test(x)
    print(t)  # >> [2, 5, 11]
    t  # >> output [2, 5, 11]
    

    编辑:

    3 回复  |  直到 7 年前
        1
  •  1
  •   o11c    7 年前

    会写:

    def __repr__(self):
        return '%s(%r)' % (self.__class__.__qualname__, self.my_list)
    

    __qualname__ __name__ __module__

    def __repr__(self):
        bits = []
        bits.append(...)
        return ''.join(bits)
    

    你所有的答案都不在课堂上,所以下面我不再提了。


    def __repr__(self):
        return " ".join((str(i) for i in self.my_list))
    

    • 缺少括号。要修复,请使用 '[%s]' % ...
    • ', '.join(...)
    • 对生成器理解的无意义的使用。与列表理解相比,生成器的速度非常慢,因此每当您立即使用整个值时,总是使用列表理解。
    • str 而不是 repr ['1', '2', '3']
    def __repr__(self):
        return reprlib.repr(self.my_list)
    

    我在该模块中使用的唯一功能是 reprlib.recursive_repr list 是的,所以你不需要它。

    def __repr__(self):
        return repr(self.my_list)
    

    '%r' % ... {!r}.format(...)

    def __repr__(self):
        return str(self.my_list)
    


    self.my_list = [c for c in aList]
    

    self.my_list = list(aList)
    
        2
  •  1
  •   Evgeny    7 年前

    我的不屈不挠 __repr__ eval() 第二个最好的方法是提供关于如何做到这一点的精确信息。

    class Spammer:
        def __init__(self, members, hidden=False):
            self._list = list(members)
            self._hidden = hidden
    
        def __repr__(self):
            return 'Spammer(members={}, hidden={})'.format(self._list, self._hidden)
    
    assert repr(Spammer([1,2], True)) == 'Spammer(members=[1, 2], hidden=True)'
    

    _报告__ 你把变化介绍给 __init__ _报告__ 在IDE中没有任何异常,因此有必要对其进行显式测试。

        3
  •  0
  •   Edward Minnix    7 年前

    • my_list str.join

    • Test([x, y, z, ...]) reprlib

    • repr str 有时