getattr, setattr, hasattr
소개
- 객체의 속성(attribute)를 문자열 이름으로 다룰 수 있게 해주는 파이썬 내장함수
- 예를 들어,
obj.name 처럼 속성을 다루는 게 아닌, “name” 이라는 문자열로 다룰 수 있게 해준다.
속성(attribute) 이란?
- 파이썬 객체, 특히 클래스 안에 정의된 값이나 메서드
1
2
3
4
| class User:
def __init__(self):
self.name = "Jongya" # 속성
self.level = 23 # 속성
|
- 보통은
객체.속성명 과 같이 속성의 값을 다룬다.
1
2
| u = User()
print(u.name)
|
1. setattr
- 객체의 특정 속성에 값을 넣을 때, 속성의 이름(name)을 이용해 값을 넣는 방법
1
2
| # 문법
setattr(객체, "속성이름", 넣을값)
|
1
2
3
4
5
6
7
| # 일반적인 방법
u = User()
u.name = "James"
# setattr 이용
u = User()
setattr(u, "name", "Iverson")
|
2. getattr
- 객체의 속성값을 불러올 때, 속성의 이름(name)을 이용해 불러오는 방법
1
2
| # 문법
getattr(객체, "속성이름", 기본값)
|
1
2
3
4
5
| # 일반적인 방법
print(u.name)
# getattr 이용
print(getattr(u, "name"))
|
1
| getattr(u, "abcd", 123)
|
1
2
| 123
# 속성값이 객체에 저장되지는 않음
|
3. hasattr
- 속성이 존재하는지 “속성의 이름”을 통해 확인하는 방법. Boolean 값을 반환.
1
2
| # 문법
hasattr(객체, "속성이름")
|
1
2
3
4
5
| hasattr(u, "name")
# >> True
hasattr(u, "age")
# >> False
|
사용하는 이유
- 일반적인 경우
객체.속성명 과 같이 사용하면 된다.
- 단, 속성의 이름이 “실행 중” 결정될 때에는 getattr, setattr 이 필요할 수 있다.
사용 예시
동적 필드(속성) 생성
- 딕셔너리 또는 리스트 형태를 받아, key를 속성 이름, value 를 속성값으로 정의하는 경우
- 키값이 미리 정해져 있지 않은 경우
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| class User:
def __init__(self, info:dict):
for k, v in info.items():
setattr(self, k, v)
info = {
"name" : "James",
"job" : "Basketball Player",
"age" : 25
}
u = User(info)
print(u.__dict__)
|
1
| {'name': 'James', 'job': 'Basketball Player', 'age': 25}
|
Comments