티스토리 뷰
Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Dynamic instantiation from string name of a class in dynamically imported module?
동적으로 가져온 모듈에서 동적 인스턴스 생성하기
문제 내용
In python, I have to instantiate certain class, knowing its name in a string, but this class 'lives' in a dynamically imported module. An example follows:
파이썬에서, 나는 문자열로 된 이름을 알고 특정 클래스를 인스턴스화해야 하지만, 이 클래스는 동적으로 가져온 모듈에서 '살아간다'. 예는 다음과 같습니다.
loader-class script:
로더 클래스 스크립트:
import sys
class loader:
def __init__(self, module_name, class_name): # both args are strings
try:
__import__(module_name)
modul = sys.modules[module_name]
instance = modul.class_name() # obviously this doesn't works, here is my main problem!
except ImportError:
# manage import error
some-dynamically-loaded-module script:
동적으로 로드된 스크립트:
class myName:
# etc...
I use this arrangement to make any dynamically-loaded-module to be used by the loader-class following certain predefined behaviours in the dyn-loaded-modules...
나는 이 배열을 사용하여 dyn-loaded-modules에서 미리 정의된 특정 동작을 따라 로더 클래스에서 사용할 동적으로 로드된 모듈을 만든다...
높은 점수를 받은 Solution
You can use getattr
getattr을 사용할 수 있습니다.
getattr(module, class_name)
to access the class. More complete code:
클래스에 액세스할 수 있습니다. 더 완전한 코드:
module = __import__(module_name)
class_ = getattr(module, class_name)
instance = class_()
As mentioned below, we may use importlib
아래에 언급된 것처럼, 우리는 importlib을 사용할 수 있다.
import importlib
module = importlib.import_module(module_name)
class_ = getattr(module, class_name)
instance = class_()
가장 최근 달린 Solution
If you want to import a class and method from string, you should do this:
문자열에서 클래스 및 메서드를 가져오려면 다음을 수행해야 합니다.
dynamic_import
│ my_class.py
│
└───subfolder
│ │ my_subfolder_module.py
│ │
my_subfolder_module.py
my_subfolder_messages.파이의
class MySubfolderClass():
def test_method(self):
print ("Hello World")
main.py
main.py
import importlib
module = importlib.import_module('subfolder.my_subfolder_module')
class_ = getattr(module, "MySubfolderClass")
method_instance = getattr(class_(),"test_method")
method_instance()
#it will output the result of the test method, which is "Hello World"
출처 : https://stackoverflow.com/questions/4821104/dynamic-instantiation-from-string-name-of-a-class-in-dynamically-imported-module
'개발 > 파이썬' 카테고리의 다른 글
| Requests 패키지를 사용할 때 SSL InsecurePlatform 오류 발생 (0) | 2022.11.28 |
|---|---|
| ImportError: 'django.core.urlresolvers'라는 모듈이 없습니다. (0) | 2022.11.28 |
| Scraping: SSL: http://en.wikipedia.org에 대한 SSL: CERTIFICATE_VERIFI_FAILED 오류 (0) | 2022.11.27 |
| 가져오기 오류: sklearn.cross_validation이라는 모듈이 없습니다. (0) | 2022.11.27 |
| python 멀티프로세싱 시도하는 중 Windows에서 런타임 오류 (0) | 2022.11.27 |