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이 언급했다 : AttributeErrordoStuff() 내부에서 발생하면 잃어 버리게된다.

어쩌면이 접근법이 더 좋을 수도 있습니다.

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')




attributes