Python'da bir nesnenin bir niteliğe sahip olup olmadığını belirlemenin bir yolu var mı? Örneğin:
>>> a = SomeClass()
>>> a.someProperty = value
>>> a.property
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: SomeClass instance has no attribute 'property'
Kullanmadan önce a
özelliğinin property
olup olmadığını nasıl anlayabilirsiniz?
Deneyin hasattr()
:
if hasattr(a, 'property'):
a.property
EDIT: Af dileme konusunda iyi tavsiyelerde bulunan aşağıdaki zweiterlinde'nin cevabına bakın! Çok pironik bir yaklaşım!
Python'daki genel uygulama, eğer özellik çoğu zaman orada olacaksa, sadece çağırın ve istisnanın yayılmasına izin verin ya da bir try/except bloğu ile tuzağa düşürün. Bu muhtemelen hasattr
dan daha hızlı olacaktır. Özelliğin çoğu zaman orada olmaması muhtemelse veya emin değilseniz, hasattr
kullanmak muhtemelen tekrar tekrar bir istisna bloğuna düşmekten daha hızlı olacaktır.
Sanırım aradığınız şey hasattr. Bununla birlikte, python özelliklerini tespit etmek istiyorsanız şöyle bir şey öneririm
try:
getattr(someObject, 'someProperty')
except AttributeError:
print "Doesn't exist"
else
print "Exists"
Buradaki dezavantaj, __get__
özellik kodundaki öznitelik hatalarının da yakalanmasıdır.
Aksi takdirde, yap-
if hasattr(someObject, 'someProp'):
#Access someProp/ set someProp
pass
Dokümanlar:http://docs.python.org/library/functions.html
Uyarı:
Önerimin nedeni hasattr'ın özellikleri algılamamasıdır.
Bağlantı:http://mail.python.org/pipermail/python-dev/2005-December/058498.html
Pydoc'a göre, hasattr(obj, prop) basitçe getattr(obj, prop)'ı çağırır ve istisnaları yakalar. Dolayısıyla, öznitelik erişimini bir try deyimi ile sarmak ve AttributeError yakalamak, önceden hasattr() kullanmak kadar geçerlidir.
a = SomeClass()
try:
return a.fake_prop
except AttributeError:
return default_value