파이썬에서 클래스를 동적으로 인스턴스화하는 방법
파이썬에서는 문자열로 주어진 클래스 이름을 사용해 클래스를 동적으로 인스턴스화할 수 있습니다. 이를 위해서는 먼저 문자열에 해당하는 실제 클래스 객체를 가져와야 하는데, 내장 함수 __import__와 getattr을 조합하면 손쉽게 구현할 수 있습니다.
def get_class(kls):
parts = kls.split('.')
module = ".".join(parts[:-1])
m = __import__(module)
for comp in parts[1:]:
m = getattr(m, comp)
return m위 함수는 '패키지.모듈.클래스명' 형태의 전체 경로 문자열을 입력받아 해당 모듈을 임포트한 후, 속성을 하나씩 따라가며 최종적으로 클래스 객체를 반환합니다. 반환된 m이 바로 우리가 원하는 클래스입니다.
이렇게 얻은 클래스는 일반적인 방식과 완전히 동일하게 인스턴스화할 수 있습니다.
a = m()
b = m(arg1, arg2) # 생성자에 인자 전달더 나은 방법: importlib 모듈 활용하기
파이썬 3 환경에서는 표준 라이브러리의 importlib 모듈을 사용하는 것이 더 권장됩니다. 문자열 기반 임포트를 더 명확하고 안전하게 처리할 수 있기 때문입니다.
import importlib
module_path, class_name = kls.rsplit('.', 1)
module = importlib.import_module(module_path)
cls = getattr(module, class_name)
instance = cls(arg1, arg2)importlib.import_module()은 모듈 경로만 담당하고, 클래스 자체는 getattr로 접근하는 구조라 코드의 의도가 분명하게 드러납니다. 플러그인 시스템이나 설정 파일 기반으로 클래스를 로딩해야 하는 상황에서 특히 유용한 패턴입니다.