迭代python中的结构元素

时间:2017-12-07 17:39:02

标签: python python-3.x struct parameters iterator

我有一个模仿matlab结构的类:

class params():
    maxresources = []
    functions = []
    terminals = []
    numvars = []
    initpoptype = []

所有元素都是列表,我的目标是迭代它们,例如看它们是否都是空的。

我尝试使用def __iter__(self):,但它没有用,我也尝试使用Enum但也没有用。

这是在Python3上完成的。

1 个答案:

答案 0 :(得分:1)

不确定为什么要这样做,或者如果使用类是更好的方法,但是,为了回答你的问题,你可以使用以下方法读取类变量:

params.__dict__.items()

这会给你

dict_items([('__module__', '__main__'), ('maxresources', []), ('functions', []), ('terminals', []), ('numvars', []), ('initpoptype', []), ('__dict__', <attribute '__dict__' of 'params' objects>), ('__weakref__', <attribute '__weakref__' of 'params' objects>), ('__doc__', None)])

从这里你可以使用不同的vatiable迭代,如:

params.__dict__['maxresources']

或者只是迭代dict_items中的元组

list(params.__dict__.items())

给出:

[('__module__', '__main__'),
 ('maxresources', []),
 ('functions', []),
 ('terminals', []),
 ('numvars', []),
 ('initpoptype', []),
 ('__dict__', <attribute '__dict__' of 'params' objects>),
 ('__weakref__', <attribute '__weakref__' of 'params' objects>),
 ('__doc__', None)]

所以你可以检查对应于没有下划线的名称的对象(每个元组中的第二个成员)