파이썬에서 모든 객체는 인스턴스 변수와 메서드를 속성(attribute) 형태로 가지고 있습니다. 따라서 문자열에 담긴 함수 이름을 이용해 모듈의 함수를 호출하려면, 먼저 해당 속성을 가져온 뒤 그 객체에 연결된 함수를 실행하면 됩니다.
getattr()을 사용한 기본 방법
가장 권장되는 방식은 내장 함수인 getattr()을 활용하는 것입니다. 예를 들어, foo라는 모듈이 있고 문자열의 내용이 "bar"라고 가정해 보겠습니다. 이때 foo.bar()를 호출하는 가장 좋은 방법은 다음과 같습니다.
>>> import foo
>>> method_to_call = getattr(foo, 'bar')
>>> result = method_to_call()
getattr(객체, '속성이름')은 해당 객체에서 지정한 이름의 속성을 찾아 반환합니다. 반환된 값이 함수 객체이므로, 이를 변수에 저장한 후 일반 함수처럼 호출할 수 있습니다. 이 방식은 함수 이름을 동적으로 결정해야 하는 상황에서 특히 유용합니다.
globals()와 locals()를 사용하는 방법
만약 호출하려는 함수가 모듈 접두사 없이 전역(global) 또는 지역(local) 네임스페이스에 정의되어 있다면, globals()나 locals()를 사용할 수도 있습니다.
- locals(): 현재 지역 심볼 테이블을 딕셔너리 형태로 반환합니다.
- globals(): 전역 심볼 테이블을 딕셔너리 형태로 반환합니다.
사용 예시
>>> result = locals()["myfunction"]()
# 또는
>>> result = globals()["myfunction"]()
두 함수 모두 이름과 객체를 매핑한 딕셔너리를 반환하기 때문에, 문자열 키를 사용해 원하는 함수를 꺼내어 바로 호출할 수 있습니다.
정리
모듈에 포함된 함수를 호출할 때는 getattr()이 가장 안전하고 명확한 방법이며, 같은 파일 안에 정의된 함수라면 globals() 또는 locals()도 간편한 대안이 될 수 있습니다. 다만 동적 호출은 코드 가독성을 떨어뜨릴 수 있으므로, 실제 프로젝트에서는 필요한 경우에만 신중하게 사용하는 것이 좋습니다.