Bonjour,
côté performance, vaut-il mieux éviter d'utiliser __getattribute__ ?
Bonjour,
côté performance, vaut-il mieux éviter d'utiliser __getattribute__ ?
Salut,
La réponse est "oui".
- W
Salut.
Du coup, il vaut mieux passer par une méthode personnelle appellant la bonne méthode suivant la valeur d'une chaîne.
D'où sais-tu que c'est chronophage ? Python doit-il à chaque fois analyser la classe ? Un dictionnaire n'est-il pas créé automatiquement ?
__getattribute__ sera toujours appelé que l'attribut soit méthode ou pas.
C'est dans le corps de la fonction __getattribute__ qu'on ira regarder dans des dict pour savoir quoi retourner. Ca fait quand même pas mal d'indirections (et d'overheads) pour juste retourner une méthode ou un attribut.
__getattr__ n'est appelé lorsque le nom n'est pas dans le dict.
Une optimisation possible dans certains cas est d'ajouter le nom/valeur dans le dict lors du premier appel: la résolution du nom suivante tapera directement dans le dict plutôt que de passer par l'indirection __getattr__.
- W
J'ai du mal à te suivre. Peux-tu juste donner un exemple un peu fictif pour clarifier ton propos (si tu as 5 min).
As-tu sous la main un script prouvant ce que tu avances ?
Tout çà est déjà écrit dans la documentation.
Que pourrais-je y ajouter?
- W
Partager