Est-il possible en Python pour déterminer si un objet possède un attribut ? Par exemple :
Comment pouvez-vous dire si possède l’attribut
avant de l’utiliser ?
Est-il possible en Python pour déterminer si un objet possède un attribut ? Par exemple :
Comment pouvez-vous dire si possède l’attribut
avant de l’utiliser ?
Essayez hasattr():
if hasattr(a, 'property'):
a.property
EDIT: Voir zweiterlinde la réponse ci-dessous, qui offre de bons conseils sur le point de demander pardon! Un très pythonic approche!
La pratique générale en python, c'est que, si le bien est susceptible d'être là la plupart du temps, il suffit de l'appeler et de laisser l'exception de se propager, ou un piège avec un try/except bloc. Ce sera probablement plus rapide que l' hasattr
. Si la propriété est susceptible de ne pas être là la plupart du temps, ou vous n'êtes pas sûr, à l'aide de hasattr
sera probablement plus rapide qu'à plusieurs reprises de tomber dans un bloc d'exception.
Comme Jarret Hardie répondu, hasattr
fera l'affaire. Je voudrais ajouter, cependant, que beaucoup dans la communauté Python de recommander une stratégie de "plus facile de demander pardon que la permission" (l'aeap) plutôt que de "réfléchir avant d'agir" (LBYL). Voir ces références:
L'aeap vs LBYL (était Re: Un peu déçu à ce jour)
L'aeap vs LBYL @Code Comme un Pythonista: Idiomatiques Python
c'est à dire:
try:
doStuff(a.property)
except AttributeError:
otherStuff()
... est préféré à:
if hasattr(a, 'property'):
doStuff(a.property)
else:
otherStuff()
Je pense que ce que vous cherchez est hasattr. Cependant, je vous recommande de quelque chose de ce genre si vous voulez détecter python propriétés-
try:
getattr(someObject, 'someProperty')
except AttributeError:
print "Doesn't exist"
else
print "Exists"
L'inconvénient ici est que les erreurs d'attribut dans les propriétés __get__
code sont également capturés.
Sinon, faites-le
if hasattr(someObject, 'someProp'):
#Access someProp/ set someProp
pass
Docs:http://docs.python.org/library/functions.html
Avertissement:
La raison de ma recommandation est que hasattr ne détecte pas les propriétés.
Lien:http://mail.python.org/pipermail/python-dev/2005-December/058498.html
Selon pydoc, hasattr(obj, prop) appelle simplement getattr(obj, prop) et de captures d'exceptions. Donc, il est tout aussi valable pour envelopper l'attribut de l'accès à une instruction try et catch AttributeError comme il est d'usage hasattr() à l'avance.
a = SomeClass()
try:
return a.fake_prop
except AttributeError:
return default_value
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.