可以使用字符串来引用对象属性吗?

时间:2013-10-18 21:02:24

标签: python string python-2.7 dictionary properties

我在StackOverflow中找不到相关的问题,所以......

我的字典中填充了行星和恒星的数据:

dict = {'name': value, 'mass' : value, 'radius': value, etc..}

此词典的键与Planet和Star类的属性具有相同的名称,我将其值赋予。

我想要做的是在根据其他填充字段计算某些缺失的数据字段后,计算所有已填充的Star和Planet对象的缺失信息量...

有没有办法单步执行此词典的键并使用键所包含的字符串引用Star / Planet对象的属性?

类似于:

for planetObjs in planets:
    for key in dict.iterkeys():
        if planetObj.key == None:
            countMissingDict[key] += 1  

我如何引用key所持有的字符串,这是与Planet对象中属性相同的字符串?这可能吗?

2 个答案:

答案 0 :(得分:3)

使用getattr

  

getattr(object, name[, default]) -> value

     

从对象获取命名属性; getattr(x, 'y')相当于   x.y。当给出默认参数时,它会在返回时返回   属性不存在;没有它,就会有例外   情况下

您可以将代码缩短为:

from collections import Counter
countMissingDict = Counter(key for planetObjs in planets for key in dic
                                         if getattr(planetObjs, key) is None)

注意:请勿将dict用作变量名称。

答案 1 :(得分:0)

您想使用getattr

for planetObj in planets:
    for key in dict.iterkeys():
        if getattr(planetObj, key) == None:
            countMissingDict[key] += 1