是否可以在Python中使类对象可迭代?

时间:2020-05-24 07:28:48

标签: python python-3.x

我想知道是否可以在Python中使类对象可迭代(即type的子类,而不是类的实例)。

我尝试了以下代码:

class Foo:
    @classmethod
    def __iter__(cls):
        yield 1


print(next(Foo.__iter__()))  # prints 1
print(next(iter(Foo)))  # TypeError: 'type' object is not iterable

2 个答案:

答案 0 :(得分:1)

事实证明,元类是可能的。

class Foo(type):
    def __iter__(self):
        yield self.baz


class Bar(metaclass=Foo):
    baz = 1


print(type(Bar))  # prints "<class '__main__.Foo'>"
print(next(Bar.__iter__()))  # prints "1"
print(next(iter(Bar)))  # prints "1"

感谢@DanielB向我指出正确的方向。

答案 1 :(得分:0)

这是不可能的,因为这意味着所有type对象都是可迭代的-如您所述,类的类型为type。其根本原因是__iter__方法是在类型而不是值上查找的。例如:

for i in Foo:
    print(i)

Python将查找type(Foo).__iter__,而不是Foo.__iter__