当前位置: 首页 > news >正文

python入门(11)面向对象 :模块与包

1. 模块

1.1 什么是模块

在 Python 中,模块是一个包含了函数、类和变量的文件。模块提供了一种组织代码的方式,使得代码更加可重用和可维护。你可以使用 Python 内置的模块,也可以创建自己的模块。

Python 模块的特点包括:

  1. 封装代码:模块允许你将相关的代码放在一起,并封装成一个独立的单元,使得代码更具可读性和可维护性。

  2. 重用性:模块可以在多个程序中重复使用,避免了重复编写相同的代码,提高了开发效率。

  3. 命名空间:模块提供了一个独立的命名空间,防止命名冲突,你可以在模块内定义变量、函数和类,它们的名称在模块内是唯一的。

  4. 导入和使用:你可以使用 import 语句导入模块,然后使用模块中定义的函数、类和变量。

Python 提供了大量的内置模块,如 mathrandomdatetime 等,可以通过直接导入这些模块来使用其中的功能。

此外,你还可以创建自己的模块,将一组相关的代码保存在一个文件中,并在其他程序中导入和使用。

下面是一个示例,演示了如何创建和使用一个简单的模块:

# 模块名:my_module.pydef greet(name):print("Hello, " + name)def add_numbers(a, b):return a + b

在另一个程序中导入并使用这个模块:

import my_modulemy_module.greet("Alice")result = my_module.add_numbers(2, 3)
print(result)  # Output: 5

通过导入模块,你可以使用模块中定义的函数和变量。模块名是文件名去掉扩展名 .py

这只是一个简单的示例,实际中你可以创建更复杂的模块,并根据需要组织和导入它们。模块是 Python 中组织代码的重要方式,有助于提高代码的可维护性和可重用性。

1.2 模块的复杂场景示例

以下是一个示例,展示了一个名为 "shopping_cart" 的模块,模拟了一个简单的购物车功能:

# 模块名:shopping_cart.pyclass Product:def __init__(self, name, price):self.name = nameself.price = pricedef __str__(self):return f"{self.name} - ${self.price}"class ShoppingCart:def __init__(self):self.items = []def add_item(self, product, quantity):self.items.append((product, quantity))def remove_item(self, product):for item in self.items:if item[0] == product:self.items.remove(item)breakdef calculate_total(self):total = 0for item in self.items:total += item[0].price * item[1]return totaldef display_cart(self):print("Shopping Cart:")for item in self.items:print(f"{item[0]} x {item[1]}")# 测试代码
if __name__ == "__main__":# 创建一些产品apple = Product("Apple", 0.5)banana = Product("Banana", 0.3)chocolate = Product("Chocolate", 2.5)# 创建购物车cart = ShoppingCart()# 添加产品到购物车cart.add_item(apple, 3)cart.add_item(banana, 2)cart.add_item(chocolate, 1)# 显示购物车内容cart.display_cart()# 计算总价total = cart.calculate_total()print(f"Total: ${total}")

在这个示例中,我们定义了一个名为 Product 的类,表示购物车中的产品。它具有名称 (name) 和价格 (price) 属性,并重写了 __str__ 方法以便在打印时显示产品信息。

然后,我们定义了一个名为 ShoppingCart 的类,表示购物车。它具有添加产品、删除产品、计算总价和显示购物车内容的方法。购物车内部使用一个列表来存储产品和对应的数量。

最后,我们在模块的最后编写了一些测试代码,用于演示购物车的使用。我们创建了几个产品对象,将它们添加到购物车中,并显示购物车的内容和总价。

你可以将以上代码保存到一个名为 "shopping_cart.py" 的文件中,并在其他程序中导入和使用该模块。例如:

import shopping_cartapple = shopping_cart.Product("Apple", 0.5)
banana = shopping_cart.Product("Banana", 0.3)cart = shopping_cart.ShoppingCart()
cart.add_item(apple, 3)
cart.add_item(banana, 2)cart.display_cart()total = cart.calculate_total()
print(f"Total: ${total}")

通过这个示例,我们可以看到如何创建一个包含多个类和方法的模块,并在其他程序中使用它们。这个模块模拟了一个简单的购物车功能,展示了模块的组织和封装能力,提供了可重用和可扩展的代码

1.3 模块语句的常用语法

(1)import 语句:使用 import 关键字引入整个模块,语法如下:

import module_name

(2)from ... import 语句:从模块中引入特定的对象或函数,语法如下:

from module_name import object_name

(3)from ... import * 语句:从模块中引入所有对象,语法如下:

from module_name import *

(4)import ... as 语句:给模块或对象起一个别名,以简化代码,语法如下:

import module_name as alias_name

(5)from ... import ... as 语句:给模块或对象起一个别名,以简化代码,语法如下:

from module_name import object_name as alias_name

这些语法可以根据需要选择使用,以方便引入模块中的对象或函数,并提高代码的可读性和简洁性。请注意,使用 from ... import * 语句可能导致命名冲突和代码可读性降低,因此建议仅在必要时使用。

下面是一个示例,展示了上述不同的模块引入语法的使用:

import module_name
module_name.function_name()from module_name import object_name
object_name.method_name()from module_name import *
function_name()import module_name as alias_name
alias_name.function_name()from module_name import object_name as alias_name
alias_name.method_name()

2. 包

当提到 Python 中的包(Package)时,它实际上是一个包含模块和子包的文件夹。包的使用可以帮助组织和管理大型项目的代码。

在 Python 中,要创建一个包,需要遵循以下步骤:

  1. 创建一个文件夹,作为包的名称,例如 my_package
  2. 在该文件夹中,可以创建一个名为 __init__.py 的空文件,以使该文件夹被识别为一个包。
  3. 在该文件夹中,可以创建一个或多个 Python 模块文件,例如 module1.pymodule2.py
  4. 在模块文件中定义相应的类、函数、变量等。

下面是一个简单的示例,演示了如何创建一个包及其使用:

假设我们创建了一个名为 my_package 的包,其中包含两个模块文件 module1.pymodule2.py

module1.py

def greeting(name):print("Hello, " + name)

module2.py

def addition(a, b):return a + b

然后,我们可以在另一个 Python 文件中导入并使用这个包:

main.py

from my_package import module1, module2module1.greeting("Alice")
result = module2.addition(2, 3)
print(result)

运行 main.py,将会输出以下结果:

Hello, Alice
5

这个示例展示了如何使用包和其中的模块。通过使用包,我们可以将相关的代码组织在一起,并使用模块的功能。包还可以嵌套,即包中可以包含其他子包,以便更好地组织和管理代码。

在实际开发中,包常用于将相关的功能模块组织在一起,并且可以方便地在不同的项目中复用。它可以提高代码的可维护性和可重用性,同时也使项目结构更加清晰。

3. 包和模块有点相似,它们的区别是什么

包(Package)和模块(Module)在 Python 中是两个不同的概念,尽管它们在某些方面有些相似,但在功能和使用上有一些区别。

模块(Module)

  • 模块是一个单独的 Python 文件,其中可以包含函数、类、变量等定义。
  • 模块通常用于封装特定功能的代码,并可以通过导入来使用。
  • 模块可以被其他模块导入并重复使用。
  • 模块之间可以存在依赖关系,一个模块可以引用和使用另一个模块中的功能。
  • 模块是组织和管理代码的基本单元。

包(Package)

  • 包是一个包含模块和子包的文件夹。它是一种组织和管理模块的方式。
  • 包本身也可以包含一个名为 __init__.py 的文件,以使其被识别为一个包。
  • 包可以嵌套,即一个包中可以包含其他子包。
  • 包提供了更高层次的模块组织方式,可以更好地管理和组织大型项目的代码。
  • 包可以包含与项目相关的多个模块,将功能相似或相关的模块组织在一起。

总结起来,模块是一个独立的 Python 文件,用于封装和组织代码。而包是一个包含模块和子包的文件夹,用于更高级别的代码组织和管理。包提供了一种逻辑上将相关的模块组织在一起的方式,使代码更加模块化、可维护和可重用。

相关文章:

python入门(11)面向对象 :模块与包

1. 模块 1.1 什么是模块 在 Python 中,模块是一个包含了函数、类和变量的文件。模块提供了一种组织代码的方式,使得代码更加可重用和可维护。你可以使用 Python 内置的模块,也可以创建自己的模块。 Python 模块的特点包括: 封装…...

《深入理解计算机系统(CSAPP)》第3章 程序的机器级表示 - 学习笔记

写在前面的话:此系列文章为笔者学习CSAPP时的个人笔记,分享出来与大家学习交流,目录大体与《深入理解计算机系统》书本一致。因是初次预习时写的笔记,在复习回看时发现部分内容存在一些小问题,因时间紧张来不及再次整理…...

【数据结构】第六周

目录 银行排队——队列 公共钥匙盒——队列 等值子串 KMP模式匹配 大整数相乘 最长公共子串 银行排队——队列 【问题描述】 我们大多都有在银行排队的经历,唉,那坑爹的排队啊!现在就让我们来算算我们这些客户平均需要等多久吧。 每天…...

6.4.6拓扑排序

用DAG&#xff08;有向无环图&#xff09;表示一个工程。顶点表示活动&#xff0c;有向边<Vi&#xff0c;Vj>表示活动Vi活动必须先与Vj活动进行。 所谓的拓扑排序&#xff1a;找到做事的先后顺序 以上根据拓扑排序的实现&#xff1a; 加入对有回路的图进行拓扑排序&#…...

Ae:常用内置抠像效果

Ae 中的抠像都是基于效果控件来实现的&#xff0c;最终生成动态遮罩来控制画面像素的透明度。 常用的内置抠像效果有&#xff1a;提取、线性颜色键、颜色差值键、内部/外部键等。 黑色或白色背景的抠像 对于白色或黑色背景的素材&#xff0c;可直接尝试图层混合模式。 或者&…...

[ 支付宝支付笔记]

目录 前言: 支付宝支付: 创建AlipayClient对象&#xff08;注意&#xff0c;这里的appId、私钥、公钥等信息需要根据实际情况进行替换&#xff09;&#xff1a; 构造AlipayTradePagePayRequest对象&#xff0c;设置订单信息等参数&#xff1a; 调用AlipayClient对象的page…...

2023九坤投资暑期实习笔试复盘

5.22号笔试&#xff0c;5.24确认自己笔试挂。想想这也是自己第一次做量化私募基金的笔试&#xff0c;在此复盘一下。情况&#xff1a;北邮本硕。但开始准备暑期准备的比较晚&#xff0c;4月初才开始一边刷题一边投简历&#xff0c;所以手撕算法不太强&#xff0c;但运气和灵感好…...

深度学习的定义和未来发展趋势

深度学习的定义和未来发展趋势 什么是深度学习数学和编程的基础知识深度学习的应用领域深度学习的常见算法和模型训练深度学习模型深度学习的未来 &#x1f3d8;️&#x1f3d8;️个人简介&#xff1a;以山河作礼。 &#x1f396;️&#x1f396;️:Python领域新星创作者&#…...

如何更改 Linux 文件和目录权限?

在Linux系统中&#xff0c;文件和目录权限是安全性和访问控制的关键组成部分。正确设置文件和目录的权限可以确保只有授权的用户能够读取、写入或执行这些文件和目录。 本文将详细介绍如何在Linux系统中更改文件和目录的权限。 1. 文件和目录权限概述 在Linux系统中&#xff…...

Revit楼板问题:楼板连接处以及楼板开洞,一键开洞

在我们做楼梯时&#xff0c;楼梯与楼板处的连接处理不是那么符合实际&#xff0c;会出现一些问题&#xff0c;如下图&#xff0c;这样的连接会导致楼梯配筋时钢筋外露。 我们来学习如何调节楼板与楼板连接处的高度&#xff0c;选中楼梯&#xff0c;点击“编辑楼梯”在所需要更改…...

【AI领域+餐饮】| 论ChatGPT在餐饮行业的应用展望

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…...

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(5月29日论文合集)

文章目录 一、检测相关(12篇)1.1 Linear Object Detection in Document Images using Multiple Object Tracking1.2 Hybrid Energy Based Model in the Feature Space for Out-of-Distribution Detection1.3 BEV-IO: Enhancing Birds-Eye-View 3D Detection with Instance Occu…...

Altium Designer 相同电路多组复制布线

在进行设计开发的时候&#xff0c;总会遇到相同的电路&#xff0c;或者模块&#xff0c;这些电路可以使用相同的布局和走线。我们可以画好其中一部分&#xff0c;然后直接复制&#xff0c;就可以提高效率。下面记录我自己的实际操作过程&#xff0c;有一些地方遇到了问题&#…...

C++线程池介绍和C++代码实现

1、介绍 1.1 线程池应用场景 在进行创建线程任务时&#xff0c;如果需要频繁的创建线程、销毁线程&#xff0c;这样会极大地降低效率&#xff0c;因为创建线程也是需要时间的&#xff0c;一个完整的线程处理运行时间包括&#xff1a;线程的创建时间、线程运作时间、线程的销毁…...

【day 06】vue的组件

组件 组件就是把一个网页分割成独立的小的模块&#xff0c;然后通过把模块进行组合&#xff0c;构建成一个大型的应用 单文件组件 只有一个组件 html css js 都在这个文件内 非单文件组件 可有多个组件 全局注册 !! 得先注册子组件 再生成 vm实例对象 创建子组件 const …...

第3章 Class and Object

构造函数 Guaranteed initialization with the constructor使用构造函数保证初始化 • If a class has a constructor, the compiler automatically calls that constructor at the point an object is created, before client programmers can get their hands on the o…...

卫星定位北斗芯片AT6558一款高性能BDS/GNSS多模卫星导航接收机SOC单芯片

1 芯片简介 AT6558R是一款高性能BDS/GNSS多模卫星导航接收机SOC单芯片,片上集成射频前端&#xff0c; 数字基带处理器&#xff0c;32位的RISCCPU&#xff0c;电源管理功能。 芯片支持多种卫星导航系统&#xff0c;包括中国的北斗卫星导航系统BDS&#xff0c;美国的GPS,俄罗斯 的…...

提升您的 MQTT 云服务:深入探索 BYOC

引言 您是否希望将物联网基础设施提升到更高的水平&#xff1f;为了应对业务的不断扩展&#xff0c;您需要一个强大且安全的消息平台来支持它。 MQTT 协议凭借其轻量级、发布/订阅模型和可靠性&#xff0c;已经成为构建物联网平台的首选方案。但是&#xff0c;随着业务的增长…...

Zookeeper面试题总结

1、说说 Zookeeper 是什么&#xff1f; 有些软件你想做成集群或者分布式&#xff0c;你可以用 ZooKeeper 帮你来辅助实现。特点&#xff1a;ZooKeeper 的特点&#xff1a;维护、协调、管理、监控 最终一致性&#xff1a;客户端看到的数据最终是一致的。可靠性&#xff1a;服务…...

如何使用HTML、CSS和JavaScript来制作这两种类型的时钟

随着计算机技术的不断发展和普及&#xff0c;人们对于时间的精准度要求也越来越高。时钟作为我们日常生活必不可少的工具之一&#xff0c;也得到了越来越多的关注和研究。而在Web开发中&#xff0c;我们同样可以使用HTML、CSS和JavaScript的组合&#xff0c;制作出各式各样的时…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...