对于类python的实例,getattr查找失败

Gwa*_*r17 1 python dictionary getattr python-2.7

我正在做一个练习,你应该计算你的项目是多么优雅的分数.高帽给你2分,领结给你4分,单片眼镜给你5分.我已经在每个类实例上启动了一个包含这些项的字典,但是当我getattr用来检查项是否具有该属性时,它总是返回None.

class Classy(object):

    def __init__(self):
        self.items = []
        self.classyItems = {'tophat': 2, 'bowtie': 4, 'monocle': 5}

    def addItem(self, str):
      self.items.append(str)

    def getClassiness(self):
      classiness = 0
      for item in self.items:
        itemIsClassy = getattr(self.classyItems, item, None) # Why does this always return none?
        if itemIsClassy:
          classiness += itemIsClassy
        else:
          pass
      return classiness


# Test cases
me = Classy()

# Should be 0
print me.getClassiness()

me.addItem("tophat")
# Should be 2
print me.getClassiness() # I'm getting 0
Run Code Online (Sandbox Code Playgroud)

为什么getattr回国None时,self.classyItems显然有顶帽的属性?

感谢大家的帮助!阅读答案之后,我仍然感到困惑,只是读取字典键不属于这里帮助我.Python是dict一个对象吗?

MSe*_*ert 8

getattr访问属性和/或方法,但是classyItems是一个没有任何(可见)属性1的字典,并将其内容存储为键值对2.

在您的情况下,您应该使用dict.get而不是getattr更具体self.classyItems.get(item, None)地使用默认值来访问值.

1字典具有可以使用的方法getattr.

2这就是你使用d[key]而不是使用它来访问它们的原因d.key.