我继承了一个项目,其中包含许多仅由类对象(整数、字符串等)组成的大类。我希望能够检查属性是否存在,而无需手动定义属性列表。
是否可以使用标准语法使 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 "<stdin>", line 1, in <module> TypeError: 'classobj' object is not iterable
即便如此,这仍然有效:
>>> for x in Foo.__iter__(): ... print(x) bar baz
原文由 multipleinterfaces 发布,翻译遵循 CC BY-SA 4.0 许可协议
添加
__iter__
到元类而不是类本身(假设 Python 2.x):对于 Python 3.x,使用