python3xiaobaike_2020/chapter6/6-5 python3小白课:定义包.md
2025-04-20 23:22:14 +08:00

2.6 KiB
Raw Permalink Blame History

python3小白课定义包

在__init__.py文件中定义包

我们可以单独在单文件中定义包,接下来我们来尝试一下。

首先创建一个文件夹名叫xiaobai,它就是未来的包名和导入名了。在文件夹中创建__init__.py文件,并编写如下内容:

# coding:utf-8

"""
小白同学的包
这是说明文档
命令add_1(num)
    将传入的数字加上1后返回
"""

def add_1(num):
    """将传入的数字加上1后返回这是函数的文档"""
    return num + 1


if __name__ == '__main__':
    print("这是在测试模块")
    help(__name__)
    print("*" * 40)
    print(__doc__)
    print(add_1(100))

该文件可以自执行来测试。

接下来我们在跟xiaobai这个文件夹同级的目录下创建一个test.py文件,编写代码如下:

# coding:utf-8
import xiaobai

help(xiaobai)
print("*" * 40)
print(xiaobai.__doc__)

print(xiaobai.add_1(1))

执行该文件,发现确实导入包就会导入__init__.py这个文件。


包内定义多个py文件

接下来我们尝试在包中的多个py文件中定义几个子模块吧。

此时__init__.py这个文件创建后留空,什么也不写。

我们在xiaobai这个包文件夹下创建一个名为module1.py的py文件编写内容如下

# coding:utf-8
"""
我是module1
"""
NAME = "小白"
AGE = 18

创建一个名为module2.py的文件,编写内容如下:

# coding:utf-8
"""
我是module2
"""
def add_1(num):
    return num + 1

Tip

你还可以多定义几个文件,把你原本的模块拆成子模块,这样每个文件内容可能都会变少,或者更加明确分类,这对于后续的维护帮助很大。

接下来我们在跟xiaobai这个文件夹同级的目录下创建一个test.py文件,编写代码如下:

# coding:utf-8
from xiaobai.module1 import NAME, AGE
import xiaobai.module2 as mod2
print(NAME, AGE)
print(mod2.add_1(100))

这里仅做了简单的调用示例,可以正常获取到模块的成员内容并调用。

后续我们将再详细讲解调用包中的成员的更多知识。


包中定义子包

当包的大小达到一定程度之后,感觉又不好维护了,或者这个包本身就是由好几个团队分别维护的,这时候这个包就很大功能很全。

由于我们讲过包其实本质也是模块,那么在包中再嵌套多个文件夹,每个文件夹像包一样的定义好,形成包中的子包,也是支持的。

关于这个,你知道了解即可,我们就不进行深入探讨了。