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

时间:2018-05-30 09:11:52

标签: python class oop attributes instances

简介

来自这个问题

Python- creating object instances in a loop with independent handling

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

最小示例

考虑使用属性name和value创建公司实例列表。现在我想知道,哪些公司确实具有最高价值。

到目前为止,我只是将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)是否有直接的方法在列表中查找实例,某个属性的值是否为最大值?

2 个答案:

答案 0 :(得分:0)

您可以在初始化对象时比较/存储全局变量中的值,而不是将所有对象存储在全局列表中并迭代它们。

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)

答案 1 :(得分:0)

它并没有完全避免for,而是将其替换为列表理解:

from operator import attrgetter

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

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