Quelle est la différence (le cas échéant) entreDifférence entre champ dynamique Python recherche
model.__dict__['title_en']
et
model.__getattribute__('title_en')
et ce qui est la meilleure pratique?
Quelle est la différence (le cas échéant) entreDifférence entre champ dynamique Python recherche
model.__dict__['title_en']
et
model.__getattribute__('title_en')
et ce qui est la meilleure pratique?
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')
.
droite. Je voulais utiliser un support qui fonctionne mais merci de le signaler. – philgo20
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!
@ ΤΖΩΤΖΙΟΥ: thxs pour l'édition, vous êtes une machine ;-) – philgo20