tl; dr
함수를 importlib.import_module
사용하여 루트 모듈을 가져 와서 이름으로 클래스를로드하십시오 getattr
.
# Standard import
import importlib
# Load "module.submodule.MyClass"
MyClass = getattr(importlib.import_module("module.submodule"), "MyClass")
# Instantiate the class (pass arguments to the constructor, if needed)
instance = MyClass()
설명
__import__
하위 모듈을 가져올 수 없으므로 모듈을 이름으로 동적으로 가져 오는 데 사용하고 싶지 않을 것입니다 .
>>> mod = __import__("os.path")
>>> mod.join
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'join'
파이썬 문서가 말한 내용은 다음과 같습니다__import__
.
참고 : 이것은 importlib.import_module ()과 달리 일상적인 Python 프로그래밍에 필요하지 않은 고급 기능입니다.
대신 표준 importlib
모듈을 사용하여 이름별로 모듈을 동적으로 가져 오십시오. 함께 getattr
사용하면 다음 이름으로 클래스를 인스턴스화 할 수 있습니다 :
import importlib
my_module = importlib.import_module("module.submodule")
MyClass = getattr(my_module, "MyClass")
instance = MyClass()
당신은 또한 쓸 수 있습니다 :
import importlib
module_name, class_name = "module.submodule.MyClass".rsplit(".", 1)
MyClass = getattr(importlib.import_module(module_name), class_name)
instance = MyClass()
이 코드는 Python ≥ 2.7 (파이썬 3 포함)에서 유효합니다.
module = __import__(module, fromlist=[name])
오직 나를 위해 일했다.