파이썬

[python] Python에서 객체에 속성이 있는지 어떻게 확인합니까?

zooheon 2022. 8. 28. 20:46
반응형

개체에 속성이 있는지 어떻게 확인합니까? 예를 들어:

>>> a = SomeClass()
>>> a.property
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: SomeClass instance has no attribute 'property'

a속성을 사용하기 전에 속성이 있는지 어떻게 알 property수 있습니까?

 

시도 hasattr():

if hasattr(a, 'property'):
    a.property

용서를 구하는 것에 대한 좋은 조언을 제공하는 아래 zweiterlinde의 답변 을 참조하십시오 ! 매우 파이썬적인 접근 방식입니다!

파이썬의 일반적인 관행은 속성이 대부분의 시간에 있을 가능성이 있는 경우 단순히 호출하고 예외가 전파되도록 하거나 try/except 블록으로 트래핑하는 것입니다. 이것은 아마도 .보다 빠를 것 hasattr입니다. 속성이 없는 경우가 많거나 확실하지 않은 hasattr경우 예외 블록에 반복적으로 빠지는 것보다 를 사용하는 것이 더 빠를 것입니다.

 

Jarret Hardie 가 대답 했듯이 hasattr트릭을 수행할 것입니다. 그러나 Python 커뮤니티의 많은 사람들이 "도망하기 전에 살펴보기"(LBYL)보다 "허가보다 용서를 구하는 것이 더 쉬운"(EAFP) 전략을 권장한다고 덧붙이고 싶습니다. 다음 참조를 참조하십시오.

EAFP 대 LBYL (Re: 지금까지는 약간 실망했습니다)
EAFP 대 LBYL @Code Like a Pythonista: Idiomatic Python

즉:

try:
    doStuff(a.property)
except AttributeError:
    otherStuff()

... 다음과 같이 선호됩니다.

if hasattr(a, 'property'):
    doStuff(a.property)
else:
    otherStuff()

 

를 사용 hasattr()하거나 catch 할 수 AttributeError있지만 속성 값이 없으면 기본값을 사용하려는 경우 가장 좋은 옵션은 다음을 사용하는 것입니다 getattr().

getattr(a, 'property', 'default value')

 

반응형