如何访问存储在列表中的所有实例的属性?

How to access the attributes of all instances stored in a list?

简介

来自这个问题

Python- creating object instances in a loop with independent handling

我在问自己,如果您创建了一个实例列表,如何访问所有实例的属性而不仅仅是单个实例。

最小示例

考虑创建一个包含属性名称和值的公司实例列表。现在我想知道,这些公司中哪家的价值最高。

到目前为止,我只是将 value 属性的值存储在一个数组中,然后找到最大值的索引。

import numpy as np

class Company(object):
    def __init__(self, name, value):
        self.name = name
        self.value = value

companies = []
for name in 'ABC':
    companies.append(Company(name, np.random.rand()))

l = len(companies)
liste = np.zeros(l)
for i in range(l):
    liste[i] = companies[i].value

ind = np.unravel_index(np.argmax(liste), liste.shape)
print("Highest value: ", liste[ind])
print("Company of highest value: ", companies[ind[0]].name)

问题

1) 是否有不同的方法可以在没有 for 循环的情况下创建所有属性值的列表?

2) 有没有一种直接的方法可以在列表中找到某个属性的值最大的实例?

您可以在初始化对象时 compare/store 全局变量中的值,而不是将所有对象存储在全局列表中并对其进行迭代。

import numpy as np
maxval = []
maxname = []

class Company(object):
  def __init__(self,name,value):
    self.name=name
    self.value=value
    if len(maxval)>0 and maxval[0] < value :
      maxval[0]=value
    elif len(maxval)==0:
      maxval.append(value)

它并没有完全避免for而是用列表推导代替它:

from operator import attrgetter

max_val_company = max((c for c in companies), key=attrgetter('value'))

max_val_company 将包含 Company 具有最大 value 属性的对象。