Python模块和包:自定义模块和包③

在这里插入图片描述

文章目录

    • 一、模块
      • 1.1 什么是模块
      • 1.2 创建模块
      • 1.3 导入模块
      • 1.4 模块的命名空间
    • 二、包
      • 2.1 什么是包
      • 2.2 创建包
      • 2.3 导入包
      • 2.4 包的命名空间
    • 三、综合详细例子
      • 3.1 项目结构
      • 3.2 模块代码
        • student.py
        • course.py
        • manager.py
      • 3.3 主程序代码
        • main.py
      • 3.4 运行结果
    • 四、总结

Python模块和包是组织代码的重要工具。通过将代码分解成独立的模块和包,可以提高代码的可读性和可维护性。在这篇博文中,我们将详细介绍如何创建和使用自定义模块和包,并附上一个综合详细的例子。

一、模块

1.1 什么是模块

模块是包含Python定义和语句的文件。模块文件名以.py为扩展名。模块可以包含函数、类和变量。

1.2 创建模块

创建模块非常简单,只需将相关代码保存在一个以.py为扩展名的文件中。例如,创建一个名为mymodule.py的模块:

# mymodule.pydef greet(name):return f"Hello, {name}!"class Person:def __init__(self, name, age):self.name = nameself.age = agedef introduce(self):return f"My name is {self.name} and I am {self.age} years old."

1.3 导入模块

导入模块可以使用import语句。例如:

# main.pyimport mymoduleprint(mymodule.greet("Alice"))person = mymodule.Person("Bob", 30)
print(person.introduce())

1.4 模块的命名空间

模块拥有自己的命名空间,模块内定义的变量、函数和类在模块外部是不可见的,必须通过模块名来访问。例如:

# mymodule.pydef greet(name):return f"Hello, {name}!"PI = 3.14159
# main.pyimport mymoduleprint(mymodule.greet("Alice"))
print(mymodule.PI)

二、包

2.1 什么是包

包是一个包含多个模块的目录。包的目录下通常会包含一个名为__init__.py的文件,该文件的存在表示该目录是一个包。包可以包含子包和模块。

2.2 创建包

创建包需要创建一个目录,并在该目录下包含一个__init__.py文件。例如,创建一个名为mypackage的包:

mypackage/__init__.pymodule1.pymodule2.py

module1.pymodule2.py是包中的模块,__init__.py是包的初始化文件。

# mypackage/module1.pydef func1():return "Function 1 from module 1"# mypackage/module2.pydef func2():return "Function 2 from module 2"

2.3 导入包

导入包可以使用import语句。例如:

# main.pyimport mypackage.module1
import mypackage.module2print(mypackage.module1.func1())
print(mypackage.module2.func2())

2.4 包的命名空间

包也有自己的命名空间。可以使用包名来访问包中的模块和函数。例如:

# main.pyimport mypackageprint(mypackage.module1.func1())
print(mypackage.module2.func2())

三、综合详细例子

以下是一个综合详细的例子,展示如何创建和使用自定义模块和包。

3.1 项目结构

project/main.pymypackage/__init__.pystudent.pycourse.pymanager.py

3.2 模块代码

student.py
# mypackage/student.pyclass Student:def __init__(self, name, student_id):self.name = nameself.student_id = student_iddef __str__(self):return f"Student Name: {self.name}, ID: {self.student_id}"
course.py
# mypackage/course.pyclass Course:def __init__(self, course_name, course_code):self.course_name = course_nameself.course_code = course_codedef __str__(self):return f"Course Name: {self.course_name}, Code: {self.course_code}"
manager.py
# mypackage/manager.pyfrom .student.py import Student
from .course.py import Courseclass Manager:def __init__(self):self.students = []self.courses = []def add_student(self, name, student_id):student = Student(name, student_id)self.students.append(student)def add_course(self, course_name, course_code):course = Course(course_name, course_code)self.courses.append(course)def list_students(self):return [str(student) for student in self.students]def list_courses(self):return [str(course) for course in self.courses]

3.3 主程序代码

main.py
# main.pyfrom mypackage.manager import Managerdef main():manager = Manager()# 添加学生manager.add_student("Alice", "S001")manager.add_student("Bob", "S002")# 添加课程manager.add_course("Mathematics", "M101")manager.add_course("Physics", "P101")# 列出学生print("Students:")for student in manager.list_students():print(student)# 列出课程print("Courses:")for course in manager.list_courses():print(course)if __name__ == "__main__":main()

3.4 运行结果

Students:
Student Name: Alice, ID: S001
Student Name: Bob, ID: S002Courses:
Course Name: Mathematics, Code: M101
Course Name: Physics, Code: P101

四、总结

本文详细介绍了如何创建和使用自定义模块和包。通过将代码组织成模块和包,可以提高代码的可读性和可维护性。我们还提供了一个综合详细的例子,展示了如何在实际项目中使用模块和包。希望本文对你理解和使用Python模块和包有所帮助。


欢迎点赞|关注|收藏|评论,您的肯定是我创作的动力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1543780.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Java 中的运算符重载

在这篇文章中,我们将深入探讨 Java 中 Operator 重载的迷人世界。尽管 Java 本身不支持运算符重载,但我们将发现 Manifold 如何使用该功能扩展 Java。我们将探讨它的好处、局限性和用例,尤其是在科学和数学代码方面。 我们还将探索 Manifold …

高清8k电脑壁纸分享

Hello!欢迎各位新老朋友来看小弟博客,祝大家事业顺利,财源广进!! 主题:高清壁纸分享 文件太大上传不上去😅😅😅😅😅,需要的朋友自取&…

国货美妆品牌整合营销多少钱?

合作咨询联系竑图 hongtu201988 化妆品品牌线上推广费用到底高不高,需要多少钱,是每个经营者最为关注的问题。结合中小美妆品牌在网络上的费用投入,有一个大致的范围:几千元到几十万不等/年!品牌越大,投入越…

什么鬼?主备同步正常,备库查询表空间使用结果却是空的?

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等) 公众号:老苏畅谈运维 欢迎关注本人公众号,更多精彩与您分享…

Centos Stream 9根目录扩容

要将 sda 的剩余空间扩展给 cs-root,可以按照以下步骤进行操作。假设你已经有剩余的未分配空间在 sda 上。 步骤 1:查看当前磁盘分区情况 首先,确保你有未分配的空间在 sda 上。 lsblk步骤 2:创建新的分区 使用 fdisk 或 par…

C++vector类的模拟实现

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 模拟实现vector类 收录于专栏【C语法基础】 本专栏旨在分享学习C的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 前置说明 1. vecto…

数据结构2——单链表

目录 1.链表 1.1链表的概念及结构 1.2 链表的分类 ​编辑2.无头单链表的实现 1. 节点 2.遍历链表 3.动态增加新节点 4.查找(修改) 5.插入 5.1 尾插 5.2 头插 5.3 在pos之前插入x 5.4 在pos之后插入x 6.删除 6.1 尾删 6.2 头删 6.3 删除…

YOLOv10改进,YOLOv10损失函数更换为Powerful-IoU(2024年最新IOU),助力高效涨点

改进前训练结果: 改进后的结果: 摘要 边界框回归(BBR)是目标检测中的核心任务之一,BBR损失函数显著影响其性能。然而,观察到现有基于IoU的损失函数存在不合理的惩罚因子,导致回归过程中锚框扩展,并显著减缓收敛速度。为了解决这个问题,深入分析了锚框扩展的原因。针…

狂神说多线程01

线程实现(重点) 多线程三个方法 继承Thread类 ⭐️实现Runnable 实现callable(了解) 线程状态 出生-? 线程同步(重点) (多个线程操作同一个对象,那个对象出现了不安…

RP2040 CXX SDK PIO应用例程

RP2040 CXX SDK PIO应用例程 📍DS18B20 PIO参考项目例程:https://github.com/jondurrant/RP2040PIO-DS18B20📍DHT11 PIO 参考项目例程:https://github.com/vmilea/pico_dht 在官方的SDK pico-examples中有关PIO的例程有20个&#…

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Halo博客平台

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Halo博客平台 Halo博客平台是一款基于Java的开源博客系统,以其简单易用、功能强大、美观大方等特点而受到广泛欢迎,采用了多种先进的技术框架,包括Freemarker模板引擎、Vue.j…

【STM32】【rt-thread】startup_stm32f405xx.S文件解读

startup_stm32f405xx.S文件解读 一、代码全文 /********************************************************************************* file startup_stm32f405xx.s* author MCD Application Team* brief STM32F405xx Devices vector table for GCC based toolcha…

每日OJ题_牛客_ 游游的you(贪心+模拟)

目录 牛客_ 游游的you(贪心模拟) 解析代码 牛客_ 游游的you(贪心模拟) 游游现在有a个y,b个o,c个u,他想用这些字母拼成一个字符串。 三个相邻的字母是"you"可以获得2分&#xff0c…

室内院内常见的不知名蚊虫(昆虫)图鉴和防治方法

文章目录 蟑螂形态特征出现源头危害性防治方法 跳蚤形态特征出现源头危害性防治方法 臭虫,又名木蚤、床虱、壁虱形态特征出现源头危害性防治方法 尘螨形态特征出现源头危害性防治方法 蛾蚋(ru),又名蛾蠓(měng&#xf…

解密.baxia勒索病毒:.baxia勒索病毒的攻击手法及防护建议

导言 在当前网络安全形势日益严峻的背景下,勒索软件的威胁正不断升级,其中.baxia勒索病毒尤为突出。作为一种新型恶意软件,.baxia病毒通过加密用户的文件并要求支付赎金来获取解密密钥,对个人和企业的安全构成了严重威胁。随着其…

医院预约|基于springBoot的医院预约挂号系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书(可指定任意题目) 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 近年来,信息化管理行业的不断兴起,使得人们的日…

国庆节适合买什么东西?精选五款实用又优惠的多功能好物!

临近国庆,我猜很多朋友已经开始为假期做好准备,计划开启出游和购物的节奏了!大家都希望在国庆期间,买到一些平时因为价格太贵而舍不得下单的好物!作为一名家居兼数码博主,每年国庆的时候我都会疯狂采购各种…

Ansible流程控制-条件语句_循环语句

文章目录 Ansible流程控制条件语句且、或、非、是模糊条件when指令的详细使用方法 循环语句如何使用使用item变量结合with_items或loop指令item变量有固定子元素? 实例-服务器安装基础环境优化需求部分实现换指定新仓库安装基础软件包 Ansible流程控制 一、 1. 条件…

文件服务器FastDFS 消息队列中间件RabbitMQ

新标签页 (chinaunix.net) FastDFS - Browse Files at SourceForge.net 一、FastDFS Tracker和Storage: tracker用来管理所有的storage,只是管理服务器,负责负载均衡。 storage是存储服务器,每一个storage服务器都是一个单独的个…

Cilium + ebpf 系列文章-什么是ebpf?(一)

前言: 这篇非常非常干,很有可能读不懂。 这里非常非常推荐,建议使用Cilium官网的lab来辅助学习!!!Resources Library - IsovalentExplore Isovalents Resource Library, your one-stop destination for ins…