存在以下类。
class Reaction(object):
Var1 = "lorem"
Var2 = "impsum"
Var3 = "dolor"
我想迭代这个类的属性,就像下面的代码一样。
for value in Reaction:
print value
这应该产生以下输出。
lorem
ipsum
dolor
我已经找到了这个主题:How to iterate over a the attributes of a class, in the order they were defined?,但它并没有真正帮助我。
如何让我的课程可迭代?
编辑:我在这篇文章中想到了类似的内容:Build a Basic Python Iterator。
答案 0 :(得分:3)
如果您确实需要一个可通过点表示法访问其成员的对象,但您仍希望迭代它们,则需要namedtuple
。
Reaction = collections.namedtuple('Reaction', ['Var1', 'Var2', 'Var3'])
reaction = Reaction('lorem', 'ipsum', 'dolor')
for value in reaction:
print value
答案 1 :(得分:1)
首先,你正在尝试的是有点不寻常 - 通常,dict
用于此类事情
Reaction = {
var1: "Lorem",
var2: "Ipsum",
var3: "Dolor"
}
如果由于某种原因您仍然偏好您的方法,则可以使用inspect.getmembers()。辅助函数可能看起来像这样
def attributes(class_):
for name, value in inspect.getmembers(class_):
if not name.startswith("__"):
yield name, value
然后你可以做
for name, value in attributes(Reactor):
# do stuff
答案 2 :(得分:1)
>>> for k, v in Reaction.__dict__.iteritems():
... if not k.startswith('__'):
... print v
...
lorem
dolor
impsum
或更好:
>>> import inspect
>>> class Reaction(object):
... Var1 = "lorem"
... Var2 = "impsum"
... Var3 = "dolor"
... def __iter__(self):
... return (v for k, v in inspect.getmembers(self) if not k.startswith('__'))
...
>>> for value in Reaction():
... print value
...
lorem
impsum
dolor