我建立了一个列表,其中包含我创建的自定义类的实例。现在,我可以像这样访问单个属性:
Name_of_list[Index of specific object].attribute1
但是:如果我想遍历bbject,则无法访问属性,将出现以下消息:
“ TypeError:'int'对象不可迭代”。
print(list)
[<__main__.Costumer object at 0x00000000118AA3C8>,
<__main__.Costumer object at 0x000000000E3A69E8>,
<__main__.Costumer object at 0x000000000E3A6E10>]
答案 0 :(得分:0)
Python使您可以迭代iterator object。您无需为此使用range
和索引,Python会在幕后为您完成它,如in this answer所示:
for customer in list:
print(customer.attribute1)
文档中的迭代器定义:
代表数据流的对象。重复调用迭代器的 next ()方法(或将其传递给内置函数next())将返回流中的后续项。
答案 1 :(得分:-1)
您的错误在循环初始化行中
for k in 3:
您不能使用in
关键字进行迭代,您需要迭代可以使用range
生成的序列
>>>for k in range(3):
... print(k)
0
1
2
修改
我看到我有一些反对意见,所以我想我会尝试澄清一些东西。
首先,OP的问题是他在一行代码中遇到错误,此后OP的代码已在编辑中删除。
代码在此路径中起作用
class MyClass:
def attribute(self):
pass
instances = [MyClass(), MyClass(), MyClass()]
for k in 3:
instances[k].attribute()
他得到了这个错误TypeError: 'int' object is not iterable
。
为此,我回答(并且接受了OP),错误是使用for
和in
您需要一个序列。
确实,使用它更具Python性(并且更具可读性)
for ins in instances:
ins.attribute()
或者如果需要跟踪当前实例的索引以使用enumerate
,则将其与可迭代对象一起使用时,它会返回索引和当前对象的元组
for k, ins in enumerate(instances):
# k will be the current index, and ins will be the current instance.