创建对象时,对象在python中不可迭代,使得类对对象可迭代

时间:2019-10-15 10:52:30

标签: python python-3.x iterator

我正在编写一个程序,在该程序中,我需要遍历类中的每个选项以对每个对象执行操作,为此我制作了一个“ 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:“类型”对象不可迭代

1 个答案:

答案 0 :(得分:1)

像这样声明一个类元类:

class TreeLine(object):
    __metaclass__ = IterRegistry

在Python 3中不起作用。相反,元类的声明如下:

class TreeLine(metaclass=IterRegistry):
    ...

语法已记录在here中。该更改是在PEP3115中提出的。

请注意,__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'>
>>>