【问题标题】:Can't iterate over a list and retrieve attributes from objects无法遍历列表并从对象中检索属性
【发布时间】:2021-02-11 12:14:24
【问题描述】:
import numpy as np

class test:
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2

arr = []

for i in range(10):
    x = np.random.uniform(0, 5, 2)
    t = test(x[0], x[1])
    arr.append(t)

print(arr[:].num1)

这给了我错误“列表”对象没有属性 num1。

如果我改为使用 for 循环来循环遍历列表,那么它会打印出来就好了:

for i in range(len(arr)):
    print(arr[i].num1)

什么给了?

【问题讨论】:

  • 因为您无法访问这样的对象列表的属性。这不是python的工作方式。您需要使用循环。
  • 顺便说一句 for i in range(len(...))anti-pattern。在许多情况下,包括这个,for element in arr 会更合适且更干净。那你就做print(element.num1)
  • 你的arr 只是普通的python 列表——不是numpy 数组,也不是pandas 数据框——而普通的python 列表没有方法从列表中的所有元素中获取num1。您需要 for-loop 或列表理解,例如 [item.num1 for item in arr]

标签: python list error-handling


【解决方案1】:

添加__repr__方法,然后使用[array]可以获取你的类的所有信息,你可以在这里查看更多信息:https://www.geeksforgeeks.org/print-objects-of-a-class-in-python/

import numpy as np

class test:
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2
        
    def __repr__(self):  
        return "num1:% s num2:% s" % (self.num1, self.num2)
arr = []

for i in range(10):
    x = np.random.uniform(0, 5, 2)
    t = test(x[0], x[1])
    arr.append(t)

print([arr])

【讨论】:

    猜你喜欢
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多