认识一下Python中的:包,模块,类 各是什么?起什么作用。 - 教程

 2026-01-24 03:08:24    3588  

我们来详细解析一下 Python 中的包(Package)、模块(Module)和类(Class)这三个核心概念,以及它们之间的关系和主要功能。

这是一个从大到小、从外到内的包含关系:包 -> 模块 -> 类 -> 函数/变量

1. 模块 (Module)是什么?

一个模块就是一个以 .py 为后缀的 Python 文件。这个文件里面包含了 Python 代码,比如函数、类、变量和可执行的代码。

文件名: my_module.py

模块名: my_module

主要功能是什么?

代码组织:将相关的代码(例如处理数据库的所有函数和类)放在一个文件中,使代码结构更清晰,更易于维护。

命名空间管理:模块可以避免命名冲突。在模块 A 中的函数 greet() 和模块 B 中的函数 greet() 不会冲突,因为它们可以通过 A.greet 和 B.greet 来区分。

代码复用:写好的模块可以被其他程序反复导入和使用,避免了重复编写相同的代码。这是 Python 强大生态的基石。

如何使用?

使用 import 语句来导入和使用模块。

python

# 导入整个模块

import math

print(math.sqrt(16)) # 输出:4.0

# 从模块中导入特定的函数/变量

from math import pi, sqrt

print(pi) # 输出:3.141592653589793

# 给模块起别名(常用于长模块名)

import numpy as np

array = np.array([1, 2, 3])

2. 包 (Package)是什么?

包是一个包含多个模块的目录。它通过一个特殊的文件 __init__.py 来标识自己是一个包(在 Python 3.3+ 中,__init__.py 不是必须的,但通常最好保留它)。

一个典型的包结构如下:

text

my_package/ <-- 包 (Package)

__init__.py <-- 包的初始化文件(标识这是一个包)

module1.py <-- 模块 (Module)

module2.py <-- 模块 (Module)

subpackage/ <-- 子包 (Sub-package)

__init__.py

module3.py

主要功能是什么?

更高层次的代码组织:当你的项目变得非常庞大,有很多模块时,包可以帮助你将功能相似的模块分组到不同的目录下。例如,一个Web应用可能有 models、views、utils 等包。

避免模块名冲突:即使两个模块同名,只要它们位于不同的包中,就不会产生冲突。例如 string 是Python标准库模块,你完全可以创建一个 mypackage/string.py 而不会引起问题。

如何使用?

使用点号 . 来导入包或子包中的模块。

python

# 导入包中的特定模块

import my_package.module1

from my_package import module2

# 从子包中导入模块

from my_package.subpackage import module3

# 导入模块中的具体内容

from my_package.module1 import my_function

__init__.py 文件的作用:

标识目录是一个Python包。

可以在其中编写初始化代码,当包被导入时,__init__.py 中的代码会首先执行。

可以定义 __all__ 列表来控制使用 from package import * 时要导入哪些模块。

一种常见用法是集中导入子模块中的关键内容,方便用户使用。

python

# 在 my_package/__init__.py 中

from .module1 import main_function, useful_variable

from .module2 import MyClass

# 这样用户可以直接从包顶层导入,而不需要知道具体在哪个模块里

# from my_package import main_function, MyClass

3. 类 (Class)是什么?

类是位于模块内部的代码结构,是面向对象编程 (OOP) 的核心。它是一个蓝图或模板,用于创建对象(实例)。类定义了对象的属性(变量)和方法(函数)。

主要功能是什么?

封装:将数据(属性)和操作数据的方法捆绑在一起,形成一个独立的单元。外部代码主要通过类提供的方法与对象交互,隐藏了内部的实现细节。

继承:允许一个类(子类)继承另一个类(父类)的属性和方法。这支持代码复用和层次结构的创建。

多态:允许不同类的对象对同一消息(方法调用)做出不同的响应,提供了代码的灵活性。

如何使用?

使用 class 关键字来定义类,然后用它来创建实例(对象)。

python

# 在一个模块(.py文件)中定义一个类

class Dog:

# 类属性(所有狗共享)

species = "Canis familiaris"

# 初始化方法(构造函数),定义实例属性

def __init__(self, name, age):

self.name = name # 实例属性

self.age = age

# 实例方法

def bark(self):

return f"{self.name} says Woof!"

def get_info(self):

return f"{self.name} is {self.age} years old."

# 在另一个文件中(或同一文件)使用这个类

from my_module import Dog # 从模块中导入类

my_dog = Dog("Rex", 5) # 创建 Dog 类的一个实例(对象)

print(my_dog.name) # 访问属性:Rex

print(my_dog.bark()) # 调用方法:Rex says Woof!

print(my_dog.species) # 访问类属性:Canis familiaris

总结与关系概念是什么功能类比包 (Package)一个包含 __init__.py 的目录组织多个模块,解决命名冲突一本书模块 (Module)一个 .py 文件组织相关的代码(类、函数等),实现代码复用书中的一个章节类 (Class)模块中的代码蓝图创建对象,实现面向对象特性(封装、继承、多态)章节中描述的一种概念或角色(如“英雄”)关系流程:

你想使用一个功能 -> 导入 一个包 -> 它里面有一个模块 -> 模块里定义了一个类 -> 你用这个类创建了一个对象 -> 调用对象的方法来完成你的任务。

示例:

假设你想用 Python 做科学计算:

你会导入 numpy 这个包:import numpy

你实际使用的是 numpy 包中的 array模块(实际上,numpy 的 __init__.py 已经帮你把最常用的模块和功能导入到了顶层,所以你直接 numpy.array() 即可)。

numpy.array 是一个类(ndarray)。

你使用 numpy.array([1,2,3]) 创建了 ndarray 类的一个实例(对象)。

你调用这个对象的 .sum()方法来计算总和。

希望这个解释能帮助你彻底理解这三者的区别和联系!


运营报表必须包含哪些数据?全面指标解析! | 帆软九数云
电脑上的微信怎么设置密码锁
友情链接