在Python中迭代未知的对象属性

在Python中迭代未知的对象属性,python,iterator,Python,Iterator,我有一个这样的班级。但是,属性名称仍然未知。在这种情况下,如何生成类迭代器?基本示例指向\uuuu iter\uuu和next()与中的示例一样,对类的属性有一些了解 我希望遍历每个对象属性,如下所示: bar = Foo(dict) for i in bar: bar[i] 您可能需要这里的vars()函数。这将返回任意对象的属性名称和值的字典。只需使用vars(obj_name)您可能需要这里的vars()函数。这将返回任意对象的属性名称和值的字典。只需使用vars(obj_nam

我有一个这样的班级。但是,属性名称仍然未知。在这种情况下,如何生成类迭代器?基本示例指向
\uuuu iter\uuu
next()
与中的示例一样,对类的属性有一些了解

我希望遍历每个对象属性,如下所示:

bar = Foo(dict)
for i in bar:
    bar[i]

您可能需要这里的
vars()
函数。这将返回任意对象的属性名称和值的字典。只需使用
vars(obj_name)

您可能需要这里的
vars()
函数。这将返回任意对象的属性名称和值的字典。只需使用
vars(obj_name)

正如@TheSoundDefense建议的那样,您可以使用
vars()
内置来列出对象的所有属性。下面的答案通过一个在您的案例中使用它的例子扩展了这个想法

实施

class Foo(object):
    def __init__(self, dictionary):
        for k, v in dictionary.iteritems():
            setattr(self, k, v)
    def __iter__(self):
        return iter(vars(self))
演示

foo = Foo({'X':1, 'Y':2, 'Z':3})
for elem in foo:
    print elem
输出

Y
X
Z

正如@TheSoundDefense建议的那样,您可以使用内置的
vars()
列出对象的所有属性。下面的答案通过一个在您的案例中使用它的例子扩展了这个想法

实施

class Foo(object):
    def __init__(self, dictionary):
        for k, v in dictionary.iteritems():
            setattr(self, k, v)
    def __iter__(self):
        return iter(vars(self))
演示

foo = Foo({'X':1, 'Y':2, 'Z':3})
for elem in foo:
    print elem
输出

Y
X
Z

您是否建议在类中使用
vars()
,作为使其可移植的一部分?是的,生成初始字典。然后,您可以根据自己的喜好对它们进行迭代,可能需要使用
iteritems
。我主要讨论的是,如果名称未知,如何获取属性。午餐回来后,我会发布一个更新,除非有更好的答案。您是否建议在类中使用
vars()
,作为使其可移植的一部分?是的,生成初始字典。然后,您可以根据自己的喜好对它们进行迭代,可能需要使用
iteritems
。我主要讨论的是,如果名称未知,如何获取属性。当我吃完午饭回来的时候,我会发布一个更新,除非有更好的答案。我被一顿过长的午餐打败了。回答得好。我被一顿过长的午餐打败了。回答得好。