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

python编程语法基础笔记(4.2)(python模块、包、反射、单例)

今天的 Python 课程围绕模块、包的使用,以及单例、反射等核心特性展开。

一、模块

1. 模块基础概念

定义:.py 文件就是一个模块,可包含变量、函数、方法等内容,用于封装特定功能的代码。
核心优势:提升代码维护性、复用性,避免命名冲突。


分类:
标准库模块:Python 自带(随安装包一起部署),部分底层由 C 语言实现
自定义模块:开发者自行编写的.py文件;
第三方模块:需额外安装(如numpy、jieba)。


注意事项:
模块命名需符合规范,区分大小写;
避免与标准库模块同名(同名时优先引入标准库模块);
模块仅加载一次,后续导入直接使用缓存,避免重复执行代码。

2. 模块导入方式

模块导入有多种灵活方式,适配不同使用场景:

导入方式语法示例说明
全部导入import order导入模块全部内容,使用时需加模块名前缀(如order.show_info()
别名导入import order as dd为模块起别名,简化调用(如dd.show_info()
指定导入from order import max_order_count, create_order仅导入模块中指定内容,直接使用(无需模块名前缀)
指定内容别名from order import show_info as show2为导入的具体内容起别名,避免命名冲突
通配符导入from order import *导入模块所有内容,不推荐(易引发命名冲突)

二、包

1. 包的基础概念

定义:Python 中包含__init__.py文件的文件夹即为包,是组织模块的高级方式。
核心作用:可包含模块、子包、其他资源,用于管理大型项目的代码结构,进一步提升维护性和复用性。
分类:标准库包、自定义包、第三方包。
包与模块的关系:.py文件是单个模块,包是管理模块的文件夹,一个包可包含多个模块 / 子包。

2. 包的导入方式

包的导入逻辑与模块一致,仅需增加包名层级:

导入方式语法示例说明
包 + 模块导入import shop.order导入shop包下的order模块,调用shop.order.show_info()
包 + 模块别名import shop.pay as zf为包下的模块起别名,调用zf.ali_pay()
包 + 模块指定内容from shop.order import create_order直接导入包下模块的具体功能
包导入模块from shop import order导入包下的模块,调用order.show_info()
包导入模块别名from shop import order as o为包下的模块起别名,简化调用

三、Python 核心特性

1. 反射

定义:程序运行时可动态检查、修改、删除、操作自身行为的特性,核心通过字符串形式操作对象的属性 / 方法。

核心函数:

函数作用示例
getattr(obj, attr, default)获取对象属性 / 方法,无则返回默认值getattr(p1, 'age', '属性不存在')
setattr(obj, attr, value)修改 / 新增对象属性,有则改、无则建setattr(p1, 'gender', '女')
hasattr(obj, attr)判断对象是否拥有指定属性 / 方法(返回布尔值)hasattr(p1, 'speak')(会递归查找类 / 父类)
delattr(obj, attr)删除对象指定属性delattr(p1, 'age')

特性说明:反射不仅可操作实例对象的自有属性,还会递归查找类、父类的属性 / 方法(如实例无speak方法,但类定义了则hasattr返回True)。

getattr(类,属性,default,报错信息) 查看自身的属性若输入类下定义的方法 返回地址 加括号直接调用。

2. 单例模式

定义:让类创建的对象在内存中仅有唯一实例,每次实例化的对象内存地址完全一致。
核心原理:重写类的__new__方法(Python 创建对象时先调用__new__分配内存,返回引用后再调用__init__初始化)。
实现思路:
类内定义私有类属性__instance,用于记录唯一实例;
__new__方法中判断__instance是否为空:空则分配内存并赋值,非空则直接返回已有实例;
配合is_first标识控制__init__仅初始化一次,避免后续实例化修改属性。
关键注意:
未加控制的 “坑版单例”:地址不变但属性会被后续实例化覆盖;
标准单例:保证地址唯一且属性保留第一次初始化的结果。


3. 身份判断与内存特性

核心运算符:
is:判断两个对象内存地址是否一致(而非值);
is not:判断两个对象内存地址是否不一致;
in/not in:判断元素是否存在于容器对象中。
内存特性规则:
不可变类型(如小整数 [-5,256]、短字符串):值相同则共用内存(is返回True);
可变类型(如列表):即使值相同,也是独立对象(is返回False);
特殊值None:全局仅有一个实例,所有None变量指向同一内存地址。

四、核心知识点总结

模块和包是 Python 代码组织的核心,模块解决单一功能封装,包解决多模块的层级管理;
导入模块 / 包的核心原则:按需导入,避免通配符*,减少命名冲突;
反射是动态操作对象的关键特性,适用于灵活的运行时属性 / 方法管理;
单例模式通过重写__new__实现,核心是保证内存中仅有一个实例;
is判断地址、==判断值,需区分不可变 / 可变类型的内存分配规则。

http://www.jsqmd.com/news/583073/

相关文章:

  • 山西口碑好的实体店获客公司哪家可靠
  • PHP源码运行受主板供电影响吗_供电相数重要性说明【技巧】
  • 告别重复劳动:利用快马ai高效生成模块化ubuntu20.04安装教程网站
  • 【芳芯科技】多种气体采集短信远程无线报警设备设计
  • 计算机毕业设计:Python车市销量大数据看板 Flask框架 scikit-learn 可视化 requests爬虫 AI 大模型(建议收藏)✅
  • C++的std--ranges开发辅助
  • enith.NET v0.0.6 发布 [特殊字符] — API 大幅精简,为 Metal 后端铺路
  • 如何利用SQL子查询进行非结构化数据处理_文本匹配
  • OpenClaw任务调度优化:千问3.5-35B-A3B-FP8资源利用率提升
  • 省时省力!PPT批量转PDF方法请查收
  • 3.30作业
  • Windows + Linux 双系统 完整版全流程教程(新手零翻车)
  • C++的std--bit位操作函数族与硬件指令在算法优化中的映射
  • AA-PEG-Cholesterol,保留了胆固醇对脂质双层的锚定能力
  • 计算机毕业设计:Python汽车数据智能分析中枢 Flask框架 可视化 机器学习 AI 大模型 大数据(建议收藏)✅
  • 2032年全球32mm和53mm热转印(TTO)设备市场达4.7亿美元:驱动与挑战并存
  • 紧急预警!Vim惊现远程代码执行漏洞CVE-2026-34714,开发者必看防护指南
  • Elsevier Tracker:学术审稿状态自动化追踪解决方案
  • 从 Agent 到 Skill:揭秘 AI 产品经理进阶的真正关键!
  • 【洛谷】P1449 后缀表达式
  • C++ 模板元编程工程应用
  • 如何彻底解决Mac滚动方向混乱:Scroll Reverser完整配置指南
  • MPC轨迹跟踪:给定圆形道路的CarsimSimulink联合仿真运动学研究
  • const和#define的区别
  • OpenClaw 从翻车到迎来上百项更新:MiniMax、腾讯、阿里、有道 8 位专家拆解OpenClaw本土化实战解法
  • 基于stm32单片机的智能导盲系统的设计与实现
  • AI医生实战入门到精通,吃透真实EHR看这篇就够了!
  • 从安装到界面实操:ABB RobotStudio 入门核心教程
  • Go语言内存模型与happens-before原则在并发程序中的实际影响
  • 揭秘:20万内数位和能被5整除的数(十六届蓝桥杯真题)