Python(三十四)python的包

简介: 我们在实际开发中,可能需要应用到多个模块,使用模块可以有效避免变量名或函数名重名引发的冲突,为了方便管理,python为我们提供了包的概念。 什么是包呢?简单理解,包就是目录,只不过在该目录下必须存在一个名为“init.py” 的文件。注意,这是 Python 2.x 的规定,而在 Python 3.x 中,init.py 对包来说,并不是必须的。 一:创建包如下图所示: 二:init.py文件就如上边所说,python3包中__init__.py文件不是必须的。但是有也是没有问题的。对于__init__.py文件来说,首先是一个python文件,所有还可以用来写pytho

我们在实际开发中,可能需要应用到多个模块,使用模块可以有效避免变量名或函数名重名引发的冲突,为了方便管理,python为我们提供了包的概念。

什么是包呢?简单理解,包就是目录,只不过在该目录下必须存在一个名为“init.py” 的文件。

注意,这是 Python 2.x 的规定,而在 Python 3.x 中,init.py 对包来说,并不是必须的。

一:创建包

如下图所示:

image.png

二:init.py文件

就如上边所说,python3包中__init__.py文件不是必须的。但是有也是没有问题的。

对于__init__.py文件来说,首先是一个python文件,所有还可以用来写python模块,但是不建议这么写,尽量保证__init__.py足够轻:

ruby

复制代码

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2021/12/30 15:02
# @Author  : camellia
# @Email   : 805795955@qq.com
# @File    : __init__.py.py
# @Software: PyCharm
class CLanguage:
    def __init__(self, name, add):
        self.name = name
        self.add = add
    def say(self):
        print(self.name, self.add)

 

这样,我们可以直接在代码中调用CLanguage这个类。但是  不建议这么写。

init.py还有一个作用就是模糊导入,模糊导入中的*中的模块是由__all__来定义的,init.py的另外一个作用就是定义package中的__all__,用来模糊导入,这个在下边的迷糊导入会说到

三:导入包

我们在包下边创建两个python模块:

ruby

复制代码

test1.py:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2022/1/6 15:39
# @Author  : stone
# @Email   : 805795955@qq.com
# @File    : test1.py
# @Software: PyCharm
def plus():
    print("1 + 1 = 2")

test2.py:

ruby

复制代码

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2022/1/6 15:39
# @Author  : stone
# @Email   : 805795955@qq.com
# @File    : test2.py
# @Software: PyCharm
def reduces():
    print("1 - 1 = 0")

导入包这里和导入模块是差不多的。

但是这里分为

1:精确导入

(1):导入包(这样导入只能使用__init__.py中的内容)

ini

复制代码

import testPackage
# 调用__init__.py中的方法
CLanguage = testPackage.CLanguage('时间里的', 'https://guanchao.site')
CLanguage.say()

输出:

arduino

复制代码

时间里的 https://guanchao.site

 

(2):精确导入  导入某一个模块

arduino

复制代码

import testPackage.test2
testPackage.test2.reduces()

输出:

ini

复制代码

1 - 1 = 0

 

(3):精确导入(导入某一个包下某一个模块下的某一个方法)

python

复制代码

from testPackage.test1 import plus
# 调用方法
plus()

输出:

ini

复制代码

1 + 1 = 2

 

2:模糊导入

在__init__.py中 添加如下代码:

ini

复制代码

__all__ = ["test1", "test2"]

在文件中调用:

python

复制代码

# 模糊导入
from testPackage import *
# 调用方法
test1.plus()
test2.reduces()

输出:

ini

复制代码

1 + 1 = 2
1 - 1 = 0

 

四:查看模块成员:dir()函数

使用dir函数:

python

复制代码

# 导入包(这样导入只能使用__init__.py中的内容)
import testPackage
print(dir(testPackage))

输出:

css

复制代码

['CLanguage', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']

 

五:查看模块成员:__all__变量

go

复制代码

import testPackage
print(testPackage.__all__)

输出:

css

复制代码

['test1', 'test2']

 

六:__file__属性:查看模块的源文件路径

go

复制代码

import testPackage
print(testPackage.__file__)
import testPackage.test2
print(testPackage.test2.__file__)

输出:

makefile

复制代码

F:\camellia\python\testProject\testPackage__init__.py
F:\camellia\python\testProject\testPackage\test2.py

以上大概就是python中的包的使用方法

有好的建议,请在下方输入你的评论。

目录
相关文章
|
18天前
|
Python 人工智能 数据可视化
Python模块与包(八)
Python模块与包(八)
20 0
Python模块与包(八)
|
1天前
|
Python
Python文件的异常、模块与包
Python文件的异常、模块与包
9 3
|
8天前
|
Python
Python中的模块与包——深入理解与应用
Python中的模块与包——深入理解与应用
|
12天前
|
Python
python(pip)包/模块:如何离线安装?
python(pip)包/模块:如何离线安装?
9 0
|
15天前
|
关系型数据库 Java 分布式数据库
实时计算 Flink版操作报错合集之在使用 Python UDF 时遇到 requests 包的导入问题,提示 OpenSSL 版本不兼容如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
35 5
|
18天前
|
Python Windows
Python分发包安装pip3
Python分发包安装pip3
11 0
|
18天前
|
Python
【Python操作基础】——包
【Python操作基础】——包
|
18天前
|
Python
在Python中快捷引入缺失包的技巧和实践
在Python中快捷引入缺失包的技巧和实践
14 0
|
18天前
|
域名解析 JSON API
Python小工具包
【5月更文挑战第2天】构建了一个Python小工具包,包含获取IP、域名解析、JSON格式化和时间戳转换的函数。通过`get_ip_address`和`resolve_domain`实现网络任务,`format_json`用于美化JSON数据,`timestamp_to_datetime`转换时间戳。这些函数可提高开发效率,易于整合到项目中,展现Python的简洁和灵活性。
41 1
Python小工具包
|
18天前
|
网络协议 算法 网络架构
Python网络编程之udp编程、黏包以及解决方案、tcpserver
Python网络编程之udp编程、黏包以及解决方案、tcpserver