我想知道是否可以在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
答案 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__
。