본문 바로가기
Python

[Python] getattr() 활용하기

by teamnova 2024. 4. 16.
728x90

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()` 함수로 속성의 존재 여부를 먼저 확인하는 것이 좋습니다.