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.rhkb.cn/news/430188.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apifox 「定时任务」操作指南,解锁自动化测试的新利器

定时任务是按照预设时间自动执行的任务,它可以有效解决一些常见问题,比如频繁执行的回归测试和大规模的接口测试,这些任务需要在固定时间点或间隔周期内自动运行,以确保软件的持续集成和持续交付过程中的稳定性和可靠性。通过使用…

计算机网络34——Windows内存管理

1、计算机体系结构 2、内存管理 分为连续分配管理和非连续分配管理 在块内存在的未使用空间叫内部碎片,在块外存在的未使用空间叫外部碎片 固定分区分配可能出现内部碎片,动态分区分配可能出现外部碎片 3、逻辑地址和实际地址的互相转换 4、缺页中断 …

微信支付商户 - 如何开通商家转账到零钱

商家转账到零钱功能的快速开通,需要商家遵循一系列步骤并确保所有条件符合微信支付的要求。以下是一些关键步骤和注意事项,以确保商家可以最快开通该功能: 一、确认申请资格 1. 公司性质:确保申请主体为公司性质(有限…

【Docker】安装全流程与配置完整镜像源(可安装 nginx)

目录 一、卸载历史版本(选)二、配置 yum 源三、安装 docker四、配置 docker 镜像源加速(选、强烈建议)4.1 配置阿里镜像加速4.2 配置其他镜像源 五、启动 docker参考文章与视频 本文基于 Linux - CentOS 7 操作系统。 一、卸载历史…

Unity3D入门(二) :Unity3D实现视角的丝滑过渡切换

1. 前言 上篇文章,我们已经初步了解了Unity3D,并新建并运行起来了一个项目,使相机视角自动围绕着立方体旋转。 这篇文章,我们来讲一下Unity3D怎么过渡地切换视角。 我们继续是我上篇文章中的项目,但是需要向把Camera…

TFT-LCD显示屏(1.8寸 STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理:TFT-LCD色彩空间 三、程序设计 main.c文件 lcd.h文件 lcd.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 TFT-LCD,全称Thin Film Transistor Liquid Crystal Display&a…

Golang | Leetcode Golang题解之第409题最长回文串

题目&#xff1a; 题解&#xff1a; func longestPalindrome(s string) int {mp : map[byte]int{}for i : 0; i < len(s); i {mp[s[i]]}res : 0for _, v : range mp {if v&1 1 {res v - 1} else {res v}}if res<len(s) {res}return res }

C++笔记21•C++11的新特性•

相比于 C98/03&#xff0c;C11则带来了数量可观的变化&#xff0c;其中包含了约140个新特性&#xff0c;以及对C03标准中约600个缺陷的修正&#xff0c;这使得C11更像是从C98/03中孕育出的一种新语言。相比较而言&#xff0c;C11能更好地用于系统开发和库开发、语法更加泛华和简…

如何合并pdf文件,四款软件,三步搞定!

在数字化办公的浪潮中&#xff0c;PDF文档因其跨平台兼容性和安全性&#xff0c;成为了我们日常工作中不可或缺的一部分。然而&#xff0c;面对多个PDF文件需要整合成一个文件时&#xff0c;不少小伙伴可能会感到头疼。别担心&#xff0c;今天我们就来揭秘四款高效PDF合并软件&…

演示:基于WPF的DrawingVisual开发的Chart图表和表格绘制

一、目的&#xff1a;基于WPF的DrawingVisual开发的Chart图表和表格绘制 二、预览 钻井井轨迹表格数据演示示例&#xff08;应用Table布局&#xff0c;模拟井轨迹深度的绘制&#xff09; 饼图表格数据演示示例&#xff08;应用Table布局&#xff0c;模拟多个饼状图组合显示&am…

尚品汇-秒杀商品定时任务存入缓存、Redis发布订阅实现状态位(五十一)

目录&#xff1a; &#xff08;1&#xff09;秒杀业务分析 &#xff08;2&#xff09;搭建秒杀模块 &#xff08;3&#xff09;秒杀商品导入缓存 &#xff08;4&#xff09;redis发布与订阅实现 &#xff08;1&#xff09;秒杀业务分析 需求分析 所谓“秒杀”&#xff0…

又到了金九银十,你的简历写好了吗?

又到了金九银十的招聘季&#xff0c;不过这几年求职环境越来越差&#xff0c;相比于跳槽找新机会&#xff0c;大家可能更倾向于守住自己手头的工作&#xff0c;稳字当头。当然&#xff0c;也有很多工作实在干烦了的朋友&#xff0c;想要换个新赛道试试。今天就给大家带来一个新…

django实现开发、测试、生产环境配置区分

文章目录 一、为什么要区分开发 (dev)、测试 (test) 和生产 (prod) 环境二、django项目如何通过配置实现环境配置的区分1、针对不同的环境创建不同的设置文件settings.py2、在设置文件中根据需要进行配置区分3、根据不同的环境运行使用不同的设置文件 任何实际的软件项目中都要…

【中级通信工程师】终端与业务(二):终端产品

【零基础3天通关中级通信工程师】 终端与业务(二)&#xff1a;终端产品 本文是中级通信工程师考试《终端与业务》科目第二章《终端产品》的复习资料和真题汇总。终端与业务是通信考试里最简单的科目&#xff0c;有效复习通过率可达90%以上&#xff0c;本文结合了高频考点和近几…

医学数据分析实训 项目三 关联规则分析作业--在线购物车分析--痹症方剂用药规律分析

文章目录 项目三 关联规则分析一、实践目的二、实践平台三、实践内容任务一&#xff1a;在线购物车分析&#xff08;一&#xff09;数据读入&#xff08;二&#xff09;数据理解&#xff08;三&#xff09;数据预处理&#xff08;四&#xff09;生成频繁项集&#xff08;五&…

基于微信小程序的美食外卖管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

分享两个虚拟试衣工具,一个在线,一个离线,还有ComfyUI插件

SAM &#xff0c;对不住了&#xff01; 我没记错的话&#xff0c;OpenAI CEO&#xff0c;性别男&#xff0c;取向男&#xff0c;配偶男。 这又让我联想到了苹果CEO库克... 所以OpenAI和Apple可以一啪即合。 钢铁直男老马就和他们都不对付~~ 开个玩笑&#xff0c;聊…

WebGL入门(一)绘制一个点

源码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><scr…

Web+Mysql——MyBatis

MyBatis 目标 能够完成Mybatis代理方式查询数据能够理解Mybatis核心配置文件的配置 1&#xff0c;Mybatis 1.1 Mybatis概述 1.1.1 Mybatis概念 MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由…

高等代数笔记(2)————(弱/强)数学归纳法

数学归纳法的引入情景其实很简单&#xff0c;就是多米诺骨牌。 推倒所有多米诺骨牌的关键就是推倒第一块&#xff0c;以及确保第一块倒下后会带动第二块&#xff0c;第二块带动第三块&#xff0c;以此类推&#xff0c;也就是可以递推。由此我们可以归纳出所有的多米诺骨牌都可…