파이썬
[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')