我有一个模仿matlab结构的类:
class params():
maxresources = []
functions = []
terminals = []
numvars = []
initpoptype = []
所有元素都是列表,我的目标是迭代它们,例如看它们是否都是空的。
我尝试使用def __iter__(self):
,但它没有用,我也尝试使用Enum
但也没有用。
这是在Python3上完成的。
答案 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)]
所以你可以检查对应于没有下划线的名称的对象(每个元组中的第二个成员)