2013-10-18 121 views
1

我無法找到的StackOverflow一個相關的問題,所以...可能使用字符串來引用對象屬性?

我在的形式充滿了對行星和恆星數據字典:

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

本詞典的按鍵具有星球和星級屬性的相同名稱,我將它們的值分配給它。

我想什麼做的是後我計算基於其他填充字段中的數據的丟失某些領域來算的缺失信息量的所有填充恆星和行星的對象......

有什麼通過這本詞典的關鍵詞的方法,並用密鑰持有的字符串引用Star/Planet對象的屬性?

因此,像:

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

如何將我指的是關鍵字保持其作爲行星對象中的屬性相同的字符串的字符串?這可能嗎?

回答

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作爲變量名。

0

你想使用getattr

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