python - 확인 - 파이썬 클래스 전역 변수




객체가 파이썬에서 속성을 가지고 있는지 알아 보는 방법 (6)

pydoc에 따르면, hasattr (obj, prop)는 단순히 getattr (obj, prop)를 호출하고 예외를 잡는다. 따라서 try 액세스 문으로 속성 액세스를 래핑하고 AttributeError를 캐치하는 것은 미리 hasattr ()을 사용하는 것처럼 유효합니다.

a = SomeClass()
try:
    return a.fake_prop
except AttributeError:
    return default_value

객체에 어떤 속성이 있는지를 결정하는 파이썬의 방법이 있습니까? 예 :

>>> 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 이 있는지 어떻게 알 수 있습니까?


나는 네가 찾고있는 것이 가축 이라고 생각한다. 그러나, 당신이 파이썬 속성 을 감지하고 싶다면 이런 식으로 뭔가를 권하고 싶습니다 -

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