我有一个以下列方式表示某些数据的结构:
/cms
我想迭代class GenericDataHolder(object):
def __init__(self):
self.xxx=[]
self.yyy=[]
class A(object):
def __init__(self):
self.a1=GenericDataHolder()
self.a2=GenericDataHolder()
class B(object):
def __init__(self):
self.b1=GenericDataHolder()
self.b2=GenericDataHolder()
self.b3=A()
元素,以便我能够访问所有嵌套对象,如下所示:
class B
我读过有一些可能的解决方案可以解决这个问题:
这对基本的例子来说都很好,但我找不到任何直接面对的问题的解决方案 - 让类的元素由其他类组成。
答案 0 :(得分:3)
for
使用对象的(内部等价物)iter()
function来获取迭代器。实施__iter__
method以生成一个:
class B(object):
def __init__(self):
self.b1 = GenericDataHolder()
self.b2 = GenericDataHolder()
self.b3 = A()
def __iter__(self):
yield self.b1
yield self.b2
yield from iter(self.b3) # use `for sub in self.b3: yield sub` in Python 2
我使用生成器函数来生成迭代器;调用__iter__
时,会创建一个生成器对象,然后按顺序生成b1
和b2
。
(Python 3)yield from
语法然后委托b3
中的所有这些值,这也需要实现协议:
class A(object):
def __init__(self):
self.a1 = GenericDataHolder()
self.a2 = GenericDataHolder()
def __iter__(self):
yield self.a1
yield self.a2
或者,B.__iter__
可以直接进入self.b3
和yield self.b3.a1
以及self.b3.a2
,而不是委托。