2010-03-11 5 views

Répondre

5

Bonne pratique? Utilisez getattr.

getattr(model, 'title_en') 

Vous voulez seulement __getattr__ ou __getattribute__ lorsque vous souhaitez override le mécanisme aller chercher attribut par défaut.

1

La première ne fonctionnera pas car __dict__ est censé être un dictionnaire, pas une fonction. Et la bonne façon est getattr(model, 'title_en').

+0

droite. Je voulais utiliser un support qui fonctionne mais merci de le signaler. – philgo20

5

Comme d'autres l'ont dit, l'intégration de getattr est la bonne façon d'obtenir un attribut (en général, vous n'accédez pas directement aux méthodes spéciales de Python: vous y accédez via les built-ins et les opérateurs!).

getattr fait beaucoup plus que d'une recherche dans __dict__ de l'objet: il prend en charge les propriétés et les autres descripteurs, attributs hérités de la classe et de ses bases (telles que les méthodes), les attributs qui peuvent être générés de manière dynamique par l'intermédiaire d'un procédé __getattr__ (en la classe de l'objet, ou encore l'une de ses bases). Tout comme l'accès direct model.title_en, quand vous connaissez le nom au moment où vous écrivez le code (dans ce cas, bien sûr, vous n'utiliserez pas getattr ;-). Cela en fait de loin le moyen préféré d'accéder à un attribut dont le nom vous "apprenez" seulement dynamiquement!

Questions connexes