无法遍历一个班级的名单

时间:2019-06-06 13:10:41

标签: python loops class instance

我建立了一个列表,其中包含我创建的自定义类的实例。现在,我可以像这样访问单个属性:

 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>]

2 个答案:

答案 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),错误是使用forin您需要一个序列。
确实,使用它更具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.