Comme les clés des dictées (chaînes de caractères) ont été mappées sur les noms de champs des namedtuples, je dois utiliser la méthode getattribute des namedtuple pour accéder aux valeurs.
C'est le mauvais outil. Vous devriez utiliser le getattr
et non la fonction intégrée __getattribute__
méthode :
getattr(your_namedtuple, attribute_name)
Cela dit, si vous souhaitez principalement accéder à vos données par nom plutôt que par index, l'appel à getattr
tout le temps, ça va être gênant. Vous pourriez sous-classer votre namedtuple
et changer la façon dont __getitem__
fonctionne donc vous pouvez toujours utiliser la notation d'indexation :
class MyType(namedtuple(...)):
__slots__ = () # avoid creating instance __dict__s
def __getitem__(self, index):
try:
return super().__getitem__(index)
except TypeError:
return getattr(self, index)