我正在编写一个程序,在该程序中,我需要遍历类中的每个选项以对每个对象执行操作,为此我制作了一个“ IterRegistry”类,以将对象的元类转换为可迭代的,但是由于某种原因,它仍然无法正常工作。
class IterRegistry(type):
def __iter__(cls):
return iter(cls._registry)
class TreeLine(object):
__metaclass__ = IterRegistry
_registry = []
def __init__(self, earnings, buy_price):
self._registry.append(self)
self.earnings = earnings
self.buy_prince = buy_price
TreeLine(0, 0)
TreeLine(0, 7)
for i in TreeLine:
print(i)
我刚收到错误消息:文件“ /Users/PycharmProjects/AISTUFF/venv/OSI@.py”,位于第23行 对于我在TreeLine中: TypeError:“类型”对象不可迭代
答案 0 :(得分:1)
像这样声明一个类元类:
class TreeLine(object):
__metaclass__ = IterRegistry
在Python 3中不起作用。相反,元类的声明如下:
class TreeLine(metaclass=IterRegistry):
...
请注意,__metaclass__
格式不是无效的语法,只是行为与Python 2不同。
>>> class M(type):pass
...
>>> class C:
... __metaclass__ = M
...
>>> type(C)
<class 'type'>
>>> class D(metaclass=M):pass
...
>>> type(D)
<class '__main__.M'>
>>>