Python包__init__.py中两种相对导入写法的语义差异咨询
两种写法存在明确语义差异,具体区别如下:
from . import module
该写法仅将module模块对象本身导入到package1的命名空间中。用户调用module内的成员时,必须书写为package1.module.成员名的形式,module内部的属性、方法、类不会直接暴露在package1的顶层命名空间下。from .module import *
该写法会将module内的所有公开成员直接导入到package1的顶层命名空间。默认情况下会导入所有不以单下划线开头的成员,如果module内定义了__all__列表,则仅导入__all__列表中指定的内容。用户调用时可以直接使用package1.成员名,无需额外带上module前缀。
如果你的需求是把module内的内容直接暴露到package1顶层供用户调用,选择第二种写法即可;如果希望把module作为独立的子模块对外暴露,选择第一种写法。
内容的提问来源于stack exchange,提问作者Uylenburgh
相关产品推荐
相关产品推荐

