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

将python中使用__getitem__的类打印为列表

  •  0
  • heltonbiker  · 技术社区  · 12 年前

    我有一个类,它应该作为差异(delta)的列表,根据另一个列表计算。例如,如果我有一个位置列表,我可以使用我的类来动态创建位移列表。

    为此,我使用了 __getitem__ 方法如下:

    class Deltas(object):
        def __init__(self, ref):
            self.ref = ref
    
        def __getitem__(self, index):
            if index == 0:
                return 0
            else:
                return self.ref[index] - self.ref[index-1]
    
    samplelist = [1,2,3,5,7,9]
    
    deltas = Deltas(samplelist)
    

    如果我打印单个元素,效果很好,但如果我打印整个列表,它会给我:

    > print deltas
    <__main__.Deltas object at 0x7f7aa93e3b50>
    

    我想知道还有什么其他方法可以实现:

    > print deltas
    [0, 1, 1, 2, 2, 2]
    
    2 回复  |  直到 9 年前
        1
  •  2
  •   Noufal Ibrahim    12 年前

    您需要实施 __repr__ print 在打印之前将其参数转换为字符串,并使用 str 这反过来又是第一次寻找 __str__ 然后 __代表__

        2
  •  1
  •   samfrances    12 年前

    例如,添加此方法将起作用:

    def __repr__(self):
        return [x for x in self].__repr__()
    

    或者:

    def __repr__(self):
        strs = []
        for x in self:
            strs.append(str(x))
        return '[%s]' % ', '.join(strs)