Je fais un exercice dans lequel vous êtes censé calculer une note de classy vos articles. Un tophat vous donne 2 points, un nœud papillon vous donne 4 points et un monocle vous donne 5 points. J'ai lancé un dictionnaire avec ces éléments sur chaque instance de classe, mais quand j'utilise getattr
pour vérifier si l'élément a l'attribut, il retourne toujours None
.La recherche de getattr échoue par exemple de la classe python
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
Pourquoi getattr
None
quand self.classyItems
retournaient a clairement l'attribut de tophat?
Merci pour l'aide à tous! J'étais encore confus après avoir lu la réponse et simplement lu que les clés du dictionnaire ne sont pas des attributs ici m'a aidé. Is Python dict an Object?
Vous pouvez utiliser la valeur par défaut dict 'self.classyItems.get (item, None)' – Vinny