Python 包 __init__.py文件用法详解

文章目录

  • 1. 按
  • 2. 示例
    • 2.1. 示例1
    • 2.2. 示例2
    • 2.3. 示例3

1. 按

__init__.py中可以设置外界通过包名所能访问的模块。

  • 当外界使用import ...语句导入包后,就可以通过.访问我们指定对外提供的模块了。
  • 当外界使用from ... import ...直接导入包内的模块时,不论导入的模块是否在__init__.py中被指定了,都可以正常被导入。

2. 示例

目录结构如下:
Python 包 __init__.py文件用法详解_第1张图片

2.1. 示例1

  • testPackage/__init__.py
    from . import send_module
    from . import receive_module
    
  • testPackage/receive_module.py
    def receive():
        print("receive function")
    
  • testPackage/send_module.py
    def send():
        print("send function")
    
  • main.py
    import testPackage
    
    testPackage.receive_module.receive()
    testPackage.send_module.send()
    

2.2. 示例2

在示例1的基础上,修改testPackage/__init__.py为:

#from . import send_module
from . import receive_module

这时再次执行时会报错module 'testPackage' has no attribute 'send_module',因为此时只能通过testPackage这个包名访问receive_module而不能访问send_module

2.3. 示例3

在示例2的基础上,修改main.py为:

import testPackage
from testPackage import send_module

testPackage.receive_module.receive()
testPackage.send_module.send()
send_module.send()

这时再次执行时就不会报错了。

你可能感兴趣的:(Python)