Gh*_*KU 13 python python-3.x python-importlib
我有一个叫做'my_class'
放入的课程'my_module'
.我需要导入这个类.我试着这样做:
import importlib
result = importlib.import_module('my_module.my_class')
Run Code Online (Sandbox Code Playgroud)
但它说:
ImportError: No module named 'my_module.my_class'; 'my_module' is not a package
Run Code Online (Sandbox Code Playgroud)
所以.我可以看到它只适用于模块,但不能处理类.如何从模块导入类?
Jim*_*ard 21
它期望my_module
是一个包含名为的模块的包'my_class'
.如果您需要动态导入类或属性,请在getattr
导入模块后使用:
cls = getattr(import_module('my_module'), 'my_class')
Run Code Online (Sandbox Code Playgroud)
此外,是的,它只适用于模块.记住importlib.import_module
是内部importlib.__import__
函数的包装器.它不提供与完整import
语句相同的功能,与完整语句一起from
执行对导入模块的属性查找.
import importlib
import logging
logger = logging.getLogger(__name__)
def factory(module_class_string, super_cls: type = None, **kwargs):
"""
:param module_class_string: full name of the class to create an object of
:param super_cls: expected super class for validity, None if bypass
:param kwargs: parameters to pass
:return:
"""
module_name, class_name = module_class_string.rsplit(".", 1)
module = importlib.import_module(module_name)
assert hasattr(module, class_name), "class {} is not in {}".format(class_name, module_name)
logger.debug('reading class {} from module {}'.format(class_name, module_name))
cls = getattr(module, class_name)
if super_cls is not None:
assert issubclass(cls, super_cls), "class {} should inherit from {}".format(class_name, super_cls.__name__)
logger.debug('initialising {} with params {}'.format(class_name, kwargs))
obj = cls(**kwargs)
return obj
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6862 次 |
最近记录: |