【发布时间】:2025-12-04 16:40:01
【问题描述】:
我想定义一个可以迭代的对象,而不必创建类和实例。像这样的:
class Thing(object):
stuff = ["foo", "bar", "baz"]
@classmethod
def __iter__(cls):
return iter(cls.stuff)
for thing in Thing:
print thing
但是这实际上不起作用。有没有办法做到这一点?
【问题讨论】:
-
对于一个类,在元类上定义
__iter__。 -
魔术方法查找发生在类上。因此,您要么必须创建实例和类,要么必须创建类和元类。但似乎你也可以只是子类列表(至少在你的例子中)。
-
@jedwards 好的,我试图避免在我的模块的命名空间中创建额外的东西,但我想我只需要处理它。这是一个非常简化的示例,在我的实际用例中,内部状态不仅仅是一个列表。
标签: python magic-methods