hasattr() 함수로 객체 속성 존재 여부 확인하기
파이썬에서 객체(obj)가 특정 속성(attribute)을 가지고 있는지 확인하려면 hasattr() 함수를 사용하면 됩니다.
hasattr(obj, 'attribute')
hasattr()는 첫 번째 인자로 전달된 객체에 두 번째 인자로 전달한 이름의 속성이 존재하면 True, 존재하지 않으면 False를 반환합니다. 별도의 예외 처리 없이 간단한 조건문으로 속성의 존재 여부를 판별할 수 있어 매우 유용합니다.
try/except와 hasattr(), 어떤 것을 사용해야 할까?
파이썬 커뮤니티에서 일반적으로 권장되는 관례(convention)는 다음과 같습니다.
- 속성이 거의 확실히 존재하는 경우: 직접 속성에 접근하고
try/except블록으로 예외를 처리하는 방식(EAFP 스타일)이 권장됩니다. 이 방식이 더 빠르고 파이썬다운 코드로 여겨집니다. - 속성이 없을 가능성이 있거나 확실하지 않은 경우:
hasattr()를 사용하는 편이 더 안전하고 가독성도 좋습니다.
예제 코드
다음 코드는 클래스 foo에 속성 'a'가 존재하는지 확인하는 방법을 보여줍니다.
class foo:
a = 54
def bar(self):
pass
if hasattr(foo, 'a'):
print(foo.a)
else:
print('No such attribute')실행 결과
54
클래스 foo에 속성 a가 실제로 존재하므로 hasattr(foo, 'a')는 True를 반환하고, 조건문 안의 print(foo.a)가 실행되어 속성 값인 54가 출력됩니다. 만약 속성이 존재하지 않았다면 'No such attribute' 메시지가 출력되었을 것입니다.
정리
hasattr(객체, '속성명') 형태로 호출하면 객체에 해당 속성이 있는지 불리언 값으로 손쉽게 확인할 수 있습니다. 속성 존재 여부가 불확실한 상황이라면 hasattr()를, 속성이 거의 항상 존재한다면 try/except를 사용하는 것이 파이썬의 모범적인 코딩 스타일입니다.