我有几个变量,如:
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 /更好的主意?我如何实现转发类等列表?等等。
答案 0 :(得分:2)
如果我理解正确,您希望“链接”self.z
和self.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