Skip to main content
 首页 » 编程设计

python之类 python 的实例的 getattr 查找失败

2025年05月04日13EasonJim

我正在做一个练习,在这个练习中,你应该计算你的元素的优雅程度的分数。礼帽给你 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 

当 self.classyItems 明明有 tophat 属性时,为什么 getattr 返回 None?

感谢大家的帮助!阅读答案后我仍然感到困惑,只是阅读字典键不是这里的属性对我有所帮助。 Is Python dict an Object?

请您参考如下方法:

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

在您的情况下,您应该使用 dict.get代替 getattr,更具体地说是 self.classyItems.get(item, None),以访问默认值。

1虽然字典有可以使用 getattr 访问的方法。

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