类型错误:类型“项目”的说法是不迭代
问题描述:
所以我创建了一个对象“项目”,这包含一个列表类型错误:类型“项目”的说法是不迭代
for item in stock_list:
item_list = item.split(",")
self.__items += [Item(item_list[0], item_list[1], float(item_list[2]), int(item_list[3]))]
当试图找到它的代码相匹配的项目(索引中的列表0)我想创建一个新的函数返回这个项目
def find_item(self, code):
for item in self.__items:
if code in item:
print(item)
当我运行这个它给了我TypeError: argument of type 'Item' is not iterable
错误,我想不通为什么? 我应该创建一个返回私有self .__代码的getCode()
函数吗?或者这不会有什么区别?
答
我猜线出现问题 -
if code in item:
自定义类的,你不能做 - x in C
- 其中C是一个自定义的类的对象(实例),除非自定义类有一个__contains__()
方法。示例 -
>>> class CC:
... pass
...
>>> class CB:
... def __contains__(self, item):
... if item == 1:
... return True
... else:
... return False
...
>>> cco = CC()
>>> cbo = CB()
>>> 1 in cco
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'CC' is not iterable
>>> 1 in cbo
True
>>> 2 in cbo
False
但考虑到这一点,__contains__()
基本上是用于成员资格测试,其中一个对象可以包含多个元素(以列表/字典为例),
如果你想比较码等于self.__code
等其他变量。然后,您需要提供返回__code
的某种方法(或属性),如果__code
又是某种列表或类似内容,并且您试图检查item
是否在self.__code
中,那么您可以覆盖如上所示的__contains__()
。
什么是代码,它的类型是什么?你想匹配什么? –
您可能必须在您的Item类中添加一个'__iter __()'方法 –
@Shari'self .__ items'不是您认为它最有可能的东西。它可能只是一个“Item”,而不是它的一个列表。 –