본문 바로가기
카테고리 없음

[python] Python 내장 함수로 객체 다루기: hasattr, getattr, setattr, delattr 완벽 정리

by JustJunsu 2024. 11. 24.

Python의 내장 함수인 hasattr, getattr, setattr, delattr는 객체 속성을 동적으로 확인, 가져오기, 설정, 삭제하는 데 매우 유용합니다. 이 포스팅에서는 각 함수의 동작 원리와 활용 예제를 중심으로, Python 객체 지향 프로그래밍에서 꼭 알아야 할 개념을 다룹니다.

1. hasattr: 객체 속성 확인하기

정의:

  • 객체에 특정 속성이 존재하는지 확인합니다.
  • 형식: hasattr(object, name)
  • 반환값: True(존재함) 또는 False(존재하지 않음).
class Person:
    def __init__(self, name):
        self.name = name

p = Person("Alice")

# 속성 확인
print(hasattr(p, "name"))  # True
print(hasattr(p, "age"))   # False

 

  • 속성 존재 여부에 따라 코드 실행 분기 처리.
  • 메서드 동적 호출 전에 검증.

2. getattr: 객체 속성 가져오기

정의:

  • 객체에서 속성을 가져옵니다. 속성이 없으면 기본값을 반환할 수 있습니다.
  • 형식: getattr(object, name[, default])
class Person:
    def __init__(self, name):
        self.name = name

p = Person("Alice")

# 속성 가져오기
print(getattr(p, "name"))          # Alice
print(getattr(p, "age", "Unknown"))  # Unknown

 

활용:

  • 기본값 설정으로 안전한 속성 접근 가능.
  • 동적으로 속성을 가져와 함수 호출 등에 활용.

3. setattr: 객체 속성 설정하기

정의:

  • 객체의 속성 값을 동적으로 설정합니다.
  • 형식: setattr(object, name, value)
class Person:
    pass

p = Person()

# 속성 설정
setattr(p, "name", "Alice")
print(p.name)  # Alice

활용:

  • 클래스 속성 동적 추가 및 업데이트.
  • 설정 값을 반복문을 통해 동적으로 처리.

4. delattr: 객체 속성 삭제하기

정의:

  • 객체에서 특정 속성을 삭제합니다.
  • 형식: delattr(object, name)
class Person:
    def __init__(self, name):
        self.name = name

p = Person("Alice")

# 속성 삭제
delattr(p, "name")
print(hasattr(p, "name"))  # False

활용:

  • 필요 없는 속성을 동적으로 제거.
  • 메모리 최적화에 기여.

 

5. 네 가지 함수의 비교와 활용

함수역할형식반환값/동작

hasattr 속성 존재 여부 확인 hasattr(obj, name) True 또는 False
getattr 속성 값 가져오기 getattr(obj, name, default) 속성 값 또는 기본값
setattr 속성 값 설정 setattr(obj, name, value) 없음 (설정만 수행)
delattr 속성 삭제 delattr(obj, name) 없음 (삭제만 수행)

6. 실전 예제: 객체 속성 동적 관리

문제:

사용자 입력에 따라 객체의 속성을 확인하고 값을 설정하며, 필요 시 삭제하는 프로그램을 작성.

class Config:
    pass

config = Config()

# 사용자 입력 처리
while True:
    action = input("Enter action (get, set, del, has, exit): ").lower()
    if action == "exit":
        break

    attr = input("Enter attribute name: ")

    if action == "set":
        value = input("Enter value: ")
        setattr(config, attr, value)
        print(f"Set {attr} to {value}")
    elif action == "get":
        print(getattr(config, attr, "Attribute not found"))
    elif action == "has":
        print(hasattr(config, attr))
    elif action == "del":
        if hasattr(config, attr):
            delattr(config, attr)
            print(f"Deleted {attr}")
        else:
            print("Attribute not found")

결과:

  • 속성의 동적 추가, 확인, 삭제가 가능.
  • 입력 기반으로 객체를 유연하게 관리.

 

7. 결론

Python의 hasattr, getattr, setattr, delattr는 객체의 속성을 동적으로 관리할 수 있는 강력한 도구입니다. 이 함수들은 코드의 유연성을 높이고, 다양한 상황에서 재사용성을 강화합니다. 특히 객체 지향 프로그래밍과 동적 시스템을 설계할 때 필수적인 기능입니다.