Python 2.7 将属性作为参数传递

Python 2.7 将属性作为参数传递,python-2.7,Python 2.7,我在一个类上有许多属性,这些属性包含整数作为值。根据用户当前的选择,给定属性的所有数据可能等于零,在这种情况下,我不想显示它 我试图定义一个函数来检查每个属性: def NoneCheck(collegelist, attribute): e = [] for college in collegelist: e.append(int(college.attribute)) if sum(e) == 0: attribute = False

我在一个类上有许多属性,这些属性包含整数作为值。根据用户当前的选择,给定属性的所有数据可能等于零,在这种情况下,我不想显示它

我试图定义一个函数来检查每个属性:

def NoneCheck(collegelist, attribute):
    e = []
    for college in collegelist:
        e.append(int(college.attribute))
    if sum(e) == 0:
        attribute = False
    else:
        attribute = True
    return attribute
但我最后犯了一个错误:

'Inventories' object has no attribute 'attribute'

显然,“attribute”并没有传递给college.attribute,而是作为“attribute”属性逐字读取。有没有办法做到这一点

IIUC,您需要
getattr
,它从名称中获取属性。例如:

def NoneCheck(collegelist, attribute):
    return sum(getattr(coll, attribute) for coll in collegelist) != 0
给予

>>无支票([库存(0),库存(0)],“帐簿”)
假的
>>>非支票([存货(0)、存货(4)],“帐簿”)
真的
>>>非检查([库存(0)、库存(4)],“未定义”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
非检查([库存(0)、库存(4)],“未定义”)
文件“”,第2行,不检查
返回和(collegelist中coll的getattr(coll,属性)=0
文件“”,第2行,在
返回和(collegelist中coll的getattr(coll,属性)=0
AttributeError:“库存”对象没有“未定义”属性

不过,我应该说,我自己很少使用
getattr
setattr
。每当您需要同时对多个属性应用某些内容时,您就会意识到需要将它们的名称放在某个位置,以便可以循环使用它们。。如果你正在这样做,你最好先用一个
dict

据我所知,这里的问题是getattr必须以字符串形式接收属性名称(例如getattr(obj,'attr'),因此它不能接受变量。不过,我可以将名称作为字符串传递,这样就可以了。谢谢您的解决方案!
>>> NoneCheck([Inventory(0), Inventory(0)], 'book')
False
>>> NoneCheck([Inventory(0), Inventory(4)], 'book')
True
>>> NoneCheck([Inventory(0), Inventory(4)], 'undefined')
Traceback (most recent call last):
  File "<ipython-input-5-4aae80aba985>", line 1, in <module>
    NoneCheck([Inventory(0), Inventory(4)], 'undefined')
  File "<ipython-input-1-424558a8260f>", line 2, in NoneCheck
    return sum(getattr(coll, attribute) for coll in collegelist) == 0
  File "<ipython-input-1-424558a8260f>", line 2, in <genexpr>
    return sum(getattr(coll, attribute) for coll in collegelist) == 0
AttributeError: 'Inventory' object has no attribute 'undefined'