类型错误:类型“项目”的说法是不迭代

问题描述:

所以我创建了一个对象“项目”,这包含一个列表类型错误:类型“项目”的说法是不迭代

 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()函数吗?或者这不会有什么区别?

+0

什么是代码,它的类型是什么?你想匹配什么? –

+1

您可能必须在您的Item类中添加一个'__iter __()'方法 –

+0

@Shari'self .__ items'不是您认为它最有可能的东西。它可能只是一个“Item”,而不是它的一个列表。 –

我猜线出现问题 -

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__()