2 votes

L'utilisation de __getattribute__ pour namedtuple : mauvaise pratique ?

J'étudie la possibilité de remplacer un très grand nombre de petits dictionnaires par des namedtuples.

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.

Non seulement le code a l'air bizarre, mais je me demande aussi si c'est une mauvaise pratique ?

3voto

user2357112 Points 37737

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)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X