我在做一个练习,你应该计算一下你的物品有多高档。一顶大礼帽给你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
为什么getattr
返回{self.classyItems
显然具有tophat属性?在
谢谢大家的帮助!读完答案后,我还是很困惑,简单地读到字典键不是这里的属性,这对我有帮助。Is Python dict an Object?
getattr()
获取要查找的对象和属性的字符串,并返回该对象。对象中没有名为item
的属性,但有classyItems
: 使用代码可以看到:使用
^{pr2}$self.classyItems.get(item, None)
查找dict并返回默认值,会更容易(并且可读)。不能用getattr
查找dict值,但是可以检查它是否具有某些方法:将
itemIsClassy = getattr(self.classyItems, item, None)
替换为itemIsClassy = self.classyItems.get(item, None)
getattr
访问属性和/或方法,但是classyItems
是一个dict,它没有任何(可见)属性1,并将其内容存储为键值对2。在在您的例子中,您应该使用^{} 而不是},来访问默认值。在
getattr
,更确切地说是{1字典有可以使用
getattr
访问的方法。在2这就是为什么您使用
d[key]
而不是d.key
来访问它们。在相关问题 更多 >
编程相关推荐