所以我创建了一个对象'Item',其中包含列表中的列表
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
错误,我无法弄清楚为什么?
我应该创建一个返回私有自我.__代码的getCode()
函数吗?或者那会不会有所作为?
答案 0 :(得分:0)
我猜这个问题出现在行 -
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__()
基本上用于成员资格测试,其中一个对象可以包含多个元素(以list / dict为例),
如果您尝试比较代码等于某些其他变量,例如self.__code
。然后你需要提供一些返回__code
的方法(或属性),如果__code
再次是某种类型的列表,那么你试图检查是否item
在self.__code
中,您可以覆盖__contains__()
,如上所示。