【问题标题】:Possible to use string to refer to object property?可以使用字符串来引用对象属性吗?
【发布时间】:2013-10-27 20:21:27
【问题描述】:

我在 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 对象中的属性使用的字符串相同?这可能吗?

【问题讨论】:

    标签: python string python-2.7 dictionary properties


    【解决方案1】:

    使用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作为变量名。

    【讨论】:

      【解决方案2】:

      你想使用getattr

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

      【讨论】:

        猜你喜欢
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多