Python의 `getattr()` 함수는 객체의 속성 값에 동적으로 접근할 때 굉장히 유용합니다. 이 글에서는 `getattr()`의 기본 사용법부터 시작해, 실제 개발 상황에서 어떻게 활용될 수 있는지 살펴보겠습니다.
`getattr()` 기본 사용법
`getattr()` 함수는 기본적으로 객체와 속성 이름을 인자로 받습니다. 존재하지 않는 속성에 접근하려 할 때는, 선택적으로 기본값을 제공할 수 있습니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Jane Doe", 28)
# 속성 접근
print(getattr(person, 'name')) # 출력: Jane Doe
print(getattr(person, 'age')) # 출력: 28
# 존재하지 않는 속성에 기본값으로 접근
print(getattr(person, 'height', 160)) # 출력: 160
활용
만약 애플리케이션의 설정을 다루는 클래스가 있고, 이 클래스의 속성으로 다양한 설정 값들을 가지고 있다고 가정해보겠습니다. 이때 `getattr()`을 사용하면, 설정 이름을 동적으로 지정하여 해당 설정의 값을 가져올 수 있습니다. 이는 특히 설정 이름이 사용자 입력이나 외부 파일로부터 오는 경우 유용합니다.
class AppConfig:
def __init__(self):
self.database_url = "sqlite:///example.db"
self.debug_mode = True
self.max_connections = 10
config = AppConfig()
# 설정 이름을 사용자 입력으로부터 받음
setting_name = input("Enter the setting name: ")
# 해당 설정 값 가져오기 (존재하지 않을 경우 None 반환)
setting_value = getattr(config, setting_name, None)
if setting_value is not None:
print(f"Setting value: {setting_value}")
else:
print("Setting does not exist.")
동적 메소드 호출
객체의 메소드를 동적으로 호출할 필요가 있을 때, 예를 들어 사용자의 입력에 따라 다른 동작을 수행하는 CLI 도구를 개발한다고 가정해봅시다. 여기서는 `getattr()`을 사용하여 객체의 메소드를 동적으로 호출할 수 있습니다.
class MathOperations:
def add(self, x, y):
return x + y
def subtract(self, x, y):
return x - y
math_ops = MathOperations()
# 사용자 입력으로부터 연산과 숫자를 받음
operation = input("Enter the operation (add/subtract): ")
numbers = input("Enter two numbers separated by space: ").split()
# 숫자 변환
num1, num2 = map(int, numbers)
# 메소드 동적 호출
if hasattr(math_ops, operation):
result = getattr(math_ops, operation)(num1, num2)
print(f"Result: {result}")
else:
print("Invalid operation.")
결론
`getattr()` 함수는 Python에서 객체의 속성이나 메소드에 동적으로 접근할 때 매우 유용한 도구입니다. 설정 관리, 동적 메소드 호출 등 다양한 실제 개발 시나리오에서 `getattr()`을 활용할 수 있습니다. 다만, 존재하지 않는 속성에 접근하려 할 때는 주의가 필요하며, 이때는 기본값을 지정하거나 `hasattr()` 함수로 속성의 존재 여부를 먼저 확인하는 것이 좋습니다.
'Python' 카테고리의 다른 글
[Python] 파이썬으로 API 요청 하기 (0) | 2024.05.05 |
---|---|
[Python] 파이썬에서 쓰레드 사용하기 (0) | 2024.04.25 |
[Python] 상속을 이용한 추가적인 기능들 (0) | 2024.04.07 |
[Python]파이썬에서 클래스 만들기와 상속하기 (0) | 2024.03.29 |
[Python] 페이지네이션으로 업비트에서 비트코인의 모든 1분봉 가져오기 (0) | 2024.03.13 |