【__init__.py】

一、作用

  • 标识一个文件夹是一个Python包。
  • 初始化包的命名空间。
  • 控制导入包中的模块或子包。
  • 实现包级别的初始化操作,例如设置环境变量和路径。
  • 提供模块级别和包级别的变量和函数。

二、使用场景

在Python包中,__init__.py的使用场景主要包括:

1. 初始化操作

可以在__init__.py文件中实现包级别的初始化操作,例如在加载包时进行一些配置或初始化设定,例如:

# __init__.py

import os

# 设置环境变量
os.environ['DATABASE_URL'] = 'sqlite:///mydb.db'

# 初始化日志模块
from . import logger
logger.init()

2. 导入模块和子包

以下为一个导入模块和子包的另一个例子,其文件结构如下:

mypackage/
|-- __init__.py
|-- module1.py
|-- module2.py
|-- subpkg/
|   |-- __init__.py
|   |-- module3.py
|   |-- submodule1/
|   |   |-- __init__.py
|   |   |-- submod1.py
|   |-- submodule2/
|       |-- __init__.py
|       |-- submod2.py
|-- main.py

mypackage__init__.py中,可以导入该包下的模块和子包,如下所示:

# mypackage/__init__.py
from .module1 import func1
from .module2 import func2
from .subpkg import module3
from .subpkg.submodule1 import submod1
from .subpkg.submodule2.submod2 import submod_func

在使用该包时,可以按如下方式导入:

# main.py

import mypackage

mypackage.func1()
mypackage.func2()
mypackage.module3.func3()
mypackage.submod1.submod1_func()
mypackage.submod_func()

其中,func1func2是在module1.pymodule2.py中定义的函数,module3是在subpkg/module3.py中定义的模块,submod1_funcsubmod_func是在submod1.pysubmod2.py中定义的函数

3. 扩展包的功能

如果一个包要被其他人使用,可以在__init__.py文件中定义一些公共接口,将包的功能变得更加完整。例如:

# __init__.py

from .module1 import function1
from .module2 import function2

__version__ = '1.0.0'

def say_hello():
    print('Hello from mypackage!')

三、例子

下面是一个简单的例子,演示了如何在__init__.py中使用import语句和变量:

# mypackage/__init__.py

import os

# 设置环境变量
os.environ['MY_ENV_VAR'] = 'Hello, World!'

# 导入模块和子包
from .module1 import *
from .subpkg import submod1

# 定义公共变量和函数
__version__ = '0.1.0'

def say_hello():
    print('Hello from mypackage!')
# mypackage/module1.py

def function1():
    print('This is function1 from module1.')
# mypackage/subpkg/__init__.py

from .submod1 import *
# mypackage/subpkg/submod1.py

def sub_function1():
    print('This is sub_function1 from submod1.')

使用上述代码,我们可以这样调用:

import mypackage

print(os.environ['MY_ENV_VAR'])

mypackage.function1()

mypackage.submod1.sub_function1()

mypackage.say_hello()

使用__init__.py文件,可以方便地组织和管理Python包,使其更加可读性和可维护性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值