Python에서는 객체의 속성(attribute)에 동적으로 접근하거나 값을 설정할 수 있는 내장 함수로 getattr()과 setattr()을 제공합니다. 두 함수는 이름이 비슷하지만 역할이 완전히 다릅니다. 이 글에서는 각 함수의 문법, 매개변수, 반환값 그리고 실제 사용 예제까지 살펴보겠습니다.
getattr() 메서드란?
getattr() 메서드는 객체에서 지정된 이름의 속성 값을 읽어 반환하는 함수입니다. 만약 해당 속성이 존재하지 않으면, 함수에 전달된 기본값(default)을 대신 반환합니다.
문법(Syntax)
getattr(object, name[, default])
매개변수
- object: 속성 값을 가져올 대상 객체
- name: 가져오려는 속성의 이름 (문자열)
- default (선택 사항): 속성이 존재하지 않을 때 반환할 기본값
반환값
- 객체에 해당 이름의 속성이 있으면 → 그 속성의 값
- 속성이 없지만 default가 지정되어 있으면 → default 값
- 속성이 없고 default도 지정되지 않았으면 → AttributeError 예외 발생
사용 예제
class Person:
name = "홍길동"
p = Person()
print(getattr(p, "name")) # 홍길동
print(getattr(p, "age", 25)) # 25 → age 속성이 없어 기본값 반환
print(getattr(p, "job")) # AttributeError 발생setattr() 메서드란?
setattr() 메서드는 객체의 지정된 속성에 새로운 값을 설정(할당)하는 함수입니다. 기존에 없던 속성이라면 새로 생성됩니다.
문법(Syntax)
setattr(object, name, value)
매개변수
- object: 속성을 설정할 대상 객체
- name: 설정하려는 속성의 이름 (문자열)
- value: 해당 속성에 할당할 값
반환값
setattr()은 항상 None을 반환합니다. 즉, 값을 설정하는 용도로만 사용되며 결과값을 돌려주지 않습니다.
사용 예제
class Person:
name = "홍길동"
p = Person()
setattr(p, "name", "김철수") # 기존 속성 수정
setattr(p, "age", 30) # 새로운 속성 추가
print(p.name) # 김철수
print(p.age) # 30getattr() vs setattr() 핵심 차이점
| 구분 | getattr() | setattr() |
|---|---|---|
| 역할 | 속성 값 읽기(조회) | 속성 값 설정(할당) |
| 필수 매개변수 | object, name | object, name, value |
| 선택 매개변수 | default | 없음 |
| 반환값 | 속성 값 또는 default | None |
| 속성이 없을 때 | default 반환 또는 AttributeError | 새 속성으로 생성됨 |
정리하면, getattr()은 객체의 속성을 안전하게 조회할 때 유용하고, setattr()은 문자열 기반으로 속성을 동적으로 추가하거나 변경할 때 사용합니다. 두 함수를 함께 활용하면 런타임에 객체의 속성을 유연하게 제어할 수 있습니다.