본문 바로가기
Python

[Python] hasattr() 함수로 객체 속성 안전하게 확인하기

by teamnova 2025. 11. 16.
728x90

안녕하세요. 

오늘은 파이썬에서 안전하게 객체 속성을 확인할 수 있는 함수인 hasattr() 에 대해 알아보겠습니다. 

 

hasattr() 

코드를 작성하다 보면 특정 객체가 사용하려는 속성(attribute)이나 메서드(method)를 가지고 있는지 확신할 수 없을 때가 있습니다.
다양한 소스에서 데이터를 받아 처리할 때, 어떤 객체에는 name 속성이 있지만 다른 객체에는 없을 수도 있습니다. 

 

이럴 때 무작정 object.name처럼 접근하려다 AttributeError 예외를 만나게 됩니다.
이런 상황을 방지할 수 있는 파이썬 내장 함수가 바로 hasattr()입니다.

hasattr() 함수는 객체가 특정 이름의 속성을 가지고 있는지 확인해 주는 파이썬 내장 함수입니다.
결과를 True 또는 False 불리언(boolean) 값으로 반환해 주기 때문에, if 문과 함께 사용하여 코드의 분기처리를 할 수 있습니다. 

 

문법
- hasattr(object, name)
- object: 속성을 확인할 대상 객체입니다. (예: 클래스 인스턴스, 모듈 등)
- name: 확인하고자 하는 속성의 이름을 문자열(string) 형태로 전달합니다.

 

 

 

예시 - 기본 속성 및  메서드(Method) 확인

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):
        print(f"안녕하세요, 제 이름은 {self.name}입니다.")

# Person 객체 생성
p1 = Person("철수", 30)

# 1. 'name' 속성이 있는지 확인
print(f"p1에 'name' 속성이 있나요? {hasattr(p1, 'name')}")

# 2. 'age' 속성이 있는지 확인
print(f"p1에 'age' 속성이 있나요? {hasattr(p1, 'age')}")

# 3. 'email' 속성이 있는지 확인
print(f"p1에 'email' 속성이 있나요? {hasattr(p1, 'email')}")

# 'speak' 메서드가 있는지 확인
print(f"p1에 'speak' 메서드가 있나요? {hasattr(p1, 'speak')}")

# 'run' 메서드가 있는지 확인
print(f"p1에 'run' 메서드가 있나요? {hasattr(p1, 'run')}")

 

 

결과 

p1에 'name' 속성이 있나요? True
p1에 'age' 속성이 있나요? True
p1에 'email' 속성이 있나요? False
p1에 'speak' 메서드가 있나요? True
p1에 'run' 메서드가 있나요? False

 

 

hasattr()의 가장 주된 사용 목적은 AttributeError 예외를 피하는 것입니다.

 

예시 

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):
        print(f"안녕하세요, 제 이름은 {self.name}입니다.")
        
# Person 객체 생성
p1 = Person("철수", 30)

if hasattr(p1, 'email'):
    print(f"이메일: {p1.email}")
else:
    print("이메일 정보가 없습니다.")

# 'speak' 메서드가 있으면 호출
if hasattr(p1, 'speak'):
    p1.speak()

 

결과 

이메일 정보가 없습니다.
안녕하세요, 제 이름은 철수입니다.