• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Python项目的 __init__.py的作用和内容

武飞扬头像
__弯弓__
帮助1

通常在python项目的源代码子目录下都看到1个__init__.py文件,django-admin startproject 命令生成的项目结构中也有__init__.py文件,
学新通

那么,为什么要加1个__init__.py`文件,其究竟有什么用,应该向里面写什么内容呢?

1. __init__.py文件的作用

__init__.py文件,如果与类定义相比,它相当于是 python package 的constructor 构造方法, 其作用是,告诉python解释器,要把本目录下哪些的函数导进包,以及这些函数位于哪些文件中。

  • __init__.py文件可以为空.
  • 不能把其它同级目录的文件导入此package中。

2. 如何使用__init__.py

下面用实例来说明 __init__.py 是如何工作的,以及应该写什么内容。

(1)在__init__.py文件中,导入需要的模块

my_package/__init__,.py中,输入以下代码,将此目录下.file1, .file2,.file3文件的函数 func_1, func_2, func_3 导入包my_package,但不包含其它函数模块

from .file1 import func_1 
# Where func_1 is the name of the function and .file1 is the name of the module/file
from .file2 import func_2
from .file3 import func_3

这种方式,只是导入了代码文件中所需要的模块。

让我们用实例来看看,导入模块的另1种方式:
在package目录下,创建1个main,.py , 在main.py中直接导入整个 my_package,下例中,可以看到,前面例子中没有的,func_5() 也导入了。

import my_package  # this imports the entire module 
# 调用func_1() 
my_package.func_1() 
my_packagee.func_2()
my_packagee.func_3()
my_packagee.func_5()

(2) 设置 __all__ 参数

__init__.py中设置 __all__ = ["func_1", "func_2", "func_3"] 告诉interpreter ,该包有哪些模块应该导入,然后在 main.py中导入my_package。最终n只有3个模块函数被导入:

from my_package import *
my_packagee.func_1() 
my_packagee.func_2()
my_packagee.func_3()

(3) 导入子目录下的包

示例项目文件结构如下:

sample/
├── docs/
├── main.py
├── my_package2/
│   ├── __init__.py
│   └── create.py

如果 main.py中需要调用子目录 my_package2下的create方法, my_package2子目录下必须有1个__init__,py文件,然后才能在main,py中导入, 这就是为什么项目的源代码子目录下总放1个 __init__,py 文件的原因。

main.py 的 import 代码如下:

from my_package2 import create
# or 
importmy_package2.create

----如果不妥之处,欢迎指正---

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhibeiha
系列文章
更多 icon
同类精品
更多 icon
继续加载