有没有办法将几个列表/变量的视图作为python中的事物列表

时间:2011-12-20 08:52:40

标签: python view abstraction

我有几个变量,如:

class X(object):
    ...

class XY(X):
    ...

class XZ(X):
    ...

class XA(X):
    ...

y=XY()
z=[XZ(i) for i in range(1,10)]
a=[XA(i) for i in range(1,10)]

我希望有一个类似于列表的视图(包括迭代和长度)的不同变量y以及z和a中的变量。

这是为了方便起见而不担心任何对性能的担忧。 我可以做到

view = [self.y] + self.z + self.a

每一次,但这似乎打破了DRY原则。

编辑:澄清这不是关于获取类的实例变量。我只想要一个视图类,可能实现一个像转发其他变量的接口这样的列表。 或者最好在调用它时创建一个返回视图列表的闭包(因为我不关心性能)。哪个更简单/更pythonic /更好的主意?我如何实现转发类等列表?等等。

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望“链接”self.zself.a的迭代器,并添加self.y。也许这就是你想要的:

import itertools
itertools.chain(self.a, self.z, [self.y])

最干净的可能是这样实现它:

class C(object):
    def __init__(self, y, z, a):
        # ...

    def __iter__(self):
        return itertools.chain(self.a, self.z, [self.y])

答案 1 :(得分:0)

第X类:

def __init__ (self, x, y, z):
    self.x = x
    self.y = y
    self.z = z

x = X(1,2,3) print x。 dict