Python:使类可迭代。

7 浏览
0 Comments

Python:使类可迭代。

我继承了一个项目,其中有许多大型类,仅由类对象(整数、字符串等)组成。我希望能够在不需要手动定义属性列表的情况下检查属性是否存在。

是否可能使用标准语法使python类本身可迭代?也就是说,我希望能够使用for attr in Foo:(甚至if attr in Foo)遍历类的所有属性,而不需要先创建类的实例。我认为可以通过定义__iter__来实现这一点,但到目前为止,我还没有完全找到我想要的结果。

我通过添加以下__iter__方法实现了一部分我想要的功能:

class Foo:
    bar = "bar"
    baz = 1
    @staticmethod
    def __iter__():
        return iter([attr for attr in dir(Foo) if attr[:2] != "__"])

然而,这还不能完全实现我想要的功能:

>>> for x in Foo:
...     print(x)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: 'classobj' object is not iterable

尽管如此,下面的代码是可行的:

>>> for x in Foo.__iter__():
...     print(x)
bar
baz

0