편집 2 :
이 솔루션은 사용자가 제공하는 모듈에서 사용할 수있는 모든 클래스를 수집하고 단순히 첫 번째 클래스를 인스턴스화합니다.
import inspect
from pydoc import locate
name = "folder.subfolder.classname"
my_module = locate(name)
all_classes = inspect.getmembers(my_module, inspect.isclass)
if len(all_classes) > 0:
instance = all_classes[0][1]()
편집 : 나는 다음과 같은 코드가 사용하는 경우에 작동합니다 생각 코멘트에서 수집
가 :
from pydoc import locate
name = "folder.subfolder.classname"
my_module = locate(name)
class_name = name.rsplit('.')[-1]
my_class = getattr(my_module, class_name)
instance = my_class()
당신은 조금 혼란 것으로 보인다 않는 것을 모듈로 우리의 잘못된 의사 소통을 가져 왔습니다. class.py는 클래스가 아니라 모듈을 가리 킵니다. 이 모듈 (class.py 파일)에는 여러 클래스가있을 수 있습니다. 위의 대답을 위해 나는 class.py 파일에 파일과 같은 이름의 클래스가 있다고 가정합니다.
원래 답변 :
아니라 오류 쇼, 당신의 my_class
변수는 실제로 모듈 개체입니다. 제공하는 이름은 실제로 클래스를 가리 키지 않고 클래스를 포함하는 모듈을 가리 킵니다. 귀하의 예제 코드에서이처럼 인스턴스화 할 수처럼 다음
my_class = getattr(module, class_name)
과 :
은 당신이 할 수있는 문자열로 모듈 객체에서 클래스를 얻으려면
instance = my_class()
는 모두 가져 오려면 함께 :
글렌. 변수 class_name은 어디에 있습니까? – BlunT
전화하는이 위치 지정 기능에 대한 자세한 정보를 제공 할 수 있습니까? 귀하의 문제가 단순히 모듈 이름을 잊어 버린 사실 인 것처럼 보이기 때문입니다. ''folder.subfolder.classname ""을 사용하는 대신에''folder.subfolder.modulename.classname "'을 사용해 보셔야합니다. 모듈 이름은'.py'가없는 파이썬 파일의 이름입니다. –
locate는 pydoc에서입니다. 질문에 추가했습니다. 구조는 "folder \ subfolder \ class.py"이고 "folder.subfolder.class"로 클래스에 액세스하려고합니다. – BlunT