【发布时间】:2015-11-28 11:49:23
【问题描述】:
我正在做一个项目,我想让我的一个类可迭代。据我所知,我可以通过使用元类来做到这一点。
首先我想了解元类是如何工作的。因此,我想展示我自己的练习示例,我制作了一个汽车课程。所以在这里我想让我的 Car 类对象可迭代,然后我想在主函数中打印它们的名称。
代码示例如下:
__author__ = 'mirind4'
class IterableCar(type):
def __iter__(self):
return iter(self.__name__)
class Car(object):
__metaclass__ = IterableCar
def __init__(self, name):
self.name = name
if __name__=='__main__':
car1 = Car('Mercedes')
car2 = Car('Toyota')
for cars in Car:
print (cars.name)
但不幸的是,我遇到了 TypeError:
TypeError: 'type' object is not iterable
您能告诉我我的代码哪里出错了吗?到目前为止,我已经在这个网站和互联网上检查了类似的问题,但我不知道问题是什么。我正在使用 python 3.4。 提前致谢!
【问题讨论】:
-
你有
for cars in Car。汽车是一个类定义。你期望它做什么?您的意思是将car1和car2放入一个列表并对其进行迭代吗? (我看到你的问题的顶部有一些关于“使类可迭代”的问题,但不清楚你想要什么。Car似乎不代表任何类型的集合。) -
@Two-BitAlchemist -- 我认为 OP 希望它产生
C - A - R... 制作可迭代 class... 的有趣概念 -
@mgilson 我实际上猜测 OP 希望它返回迄今为止创建的每个实例,我怀疑这是可能的,但我们会看到。
-
在 Python 3 中,您使用
class Car(metaclass=IterableCar)定义元类,而不是使用__metaclass__属性。 -
假设元类提供
__new__的定义,我相信是这样。