python - 확인 - 파이썬 클래스 전역 변수
객체가 파이썬에서 속성을 가지고 있는지 알아 보는 방법 (6)
객체에 어떤 속성이 있는지를 결정하는 파이썬의 방법이 있습니까? 예 :
>>> 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'
속성 property
을 사용하기 전에 속성 property
이 있는지 어떻게 알 수 있습니까?
pydoc에 따르면, hasattr (obj, prop)는 단순히 getattr (obj, prop)를 호출하고 예외를 잡는다. 따라서 try 액세스 문으로 속성 액세스를 래핑하고 AttributeError를 캐치하는 것은 미리 hasattr ()을 사용하는 것처럼 유효합니다.
a = SomeClass()
try:
return a.fake_prop
except AttributeError:
return default_value
나는 네가 찾고있는 것이 가축 이라고 생각한다. 그러나, 당신이 파이썬 속성 을 감지하고 싶다면 이런 식으로 뭔가를 권하고 싶습니다 -
try:
getattr(someObject, 'someProperty')
except AttributeError:
print "Doesn't exist"
else
print "Exists"
단점은 속성 __get__
코드의 속성 오류도 발생한다는 것입니다.
그렇지 않으면 do-
if hasattr(someObject, 'someProp'):
#Access someProp/ set someProp
pass
문서 도구 : http://docs.python.org/library/functions.html
경고:
저의 추천 이유는 hasattr이 속성을 감지하지 못하기 때문입니다.
링크 : http://mail.python.org/pipermail/python-dev/2005-December/058498.html
이 문제를 피하는 것이 좋습니다.
try:
doStuff(a.property)
except AttributeError:
otherStuff()
사용자 @jpalecek이 언급했다 : AttributeError
가 doStuff()
내부에서 발생하면 잃어 버리게된다.
어쩌면이 접근법이 더 좋을 수도 있습니다.
try:
val = a.property
except AttributeError:
otherStuff()
else:
doStuff(val)
희망 hasattr (),하지만 hasattr () 피하려고하고 getattr () 선호하시기 바랍니다. getattr ()은 hasattr ()보다 빠릅니다.
hasattr () 사용 :
if hasattr(a, 'property'):
print a.property
getattr을 사용하여 속성을 얻지 못했습니다. 반환되는 속성이없는 경우
property = getattr(a,"property",None)
if property:
print property
hasattr()
시도하십시오.
if hasattr(a, 'property'):
a.property
편집 : 아래 zweiterlinde의 답변을 참조 용서 물어에 대한 좋은 조언을 제공합니다! 매우 비약적인 접근!
파이썬의 일반적인 관례는 속성이 대부분있을 가능성이 있다면 간단히 호출하고 예외를 전파 시키거나 try / except 블록으로 트랩하는 것입니다. 이것은 아마도 hasattr
보다 hasattr
것이다. 속성이 대부분의 시간에 없거나 확실하지 않은 경우 hasattr
을 사용하면 반복적으로 예외 블록에 빠지는 것보다 빠를 것입니다.
hasattr()
하거나 AttributeError
catch 할 수 있지만, 기본값이없는 애트리뷰트의 값을 원한다면 getattr()
을 사용하는 것이 가장 좋습니다.
getattr(a, 'property', 'default value')