tags: [笔记, init.py]
categories: [笔记, init.py]


在创建python包的过程中,IDE都会在包根目录下创建一个init.py文件,该Python文件默认是空的。
整理自:https://www.cnblogs.com/AlwinXu/p/5598543.html

1、介绍

每个package实际上是一个目录(Directory),IDE通过init.py文件识别它为package。因此,init.py的第一个作用就是package的标识,如果没有该文件,该目录就不会认为是package。

2、导入包的方式

Python中的包和模块有两种导入方式:精确导入和模糊导入。

2.1 精确导入

  1. from Root.Pack1 import Pack1Class
  2. import Root.Pack1.Pack1Class

2.2 模糊导入

  1. from Root.Pack1 import *

模糊导入中的*中的模块是由all来定义的,init.py的另外一个作用就是定义package中的all,用来模糊导入,如init.py:

  1. __all__ = ["Pack1Class","Pack1Class1"]

在包外部调用时,就会导入all里面的全部模块如Pack1Class”,”Pack1Class1
示例:

  1. from Root.Pack1 import *
  2. a = Pack1Class.Pack1_AA("Alvin")
  3. a.PrintName()

init.py首先是一个python文件,所以还可以用来写python模块,但是不建议这么写,应尽量保证init.py足够简洁:
init.py:

  1. __all__ = ["Pack1Class","Pack1Class1","Init_AA"]
  2. class Init_AA: # 不建议写在__init__.py文件中,可以另建一个py文件写
  3. def __init__(self,name):
  4. self.name = name
  5. def Greeting(self):
  6. print("Hello ",self.name)

在测试中调用:
test.py:

  1. from Root.Pack1 import *
  2. b = Init_AA("test")
  3. b.Greeting()

3、总结:

从上边的例子可以看出,init.py的主要作用是:
1. Python中package的标识,不能删除
2. 定义all用来模糊导入
3. 编写Python代码(不建议在init中写python模块,可以在包中在创建另外的模块来写,尽量保证init.py简单)