即使通过我认为这是一个非常基本的问题,我也面临着一种我不理解的行为......
想象一下,你有一个包含模块mypackage
的python包mymodule
,包含2个文件__init__.py
和my_object.py
。上一个文件包含一个名为MyObject
的类。
我正试图在__init__.py
内修改一个等同于:
__初始化__。PY
__all__ = ['MyObject']
from my_object import MyObject
为了能够做到:
from mypackge.mymodule import MyObject
我想出了一个解决方案,用所有类的名称填充所有。它使用__import__
(也尝试了importlib.import_module()
方法),但当我尝试从MyObject
导入mymodule
时,它会一直告诉我:
ImportError: cannot import name MyObject
这是我开始使用的脚本:
classes = []
for module in os.listdir(os.path.dirname(__file__)):
if module != '__init__.py' and module[-3:] == '.py':
module_name = module[:-3]
import_name = '%s.%s' % (__name__, module_name)
# Import module here! Looking for an equivalent to 'from module import MyObject'
# importlib.import_module(import_name) # Same behaviour
__import__(import_name, globals(), locals(), ['*'])
members = inspect.getmembers(sys.modules[import_name], lambda member: inspect.isclass(member) and member.__module__.startswith(__name__) )
names = [member[0] for member in members]
classes.extend(names)
__all__ = classes
有人可以帮助我吗?
非常感谢,
答案 0 :(得分:0)
您只需要在模块上分配属性:globals().update(members)
。