news 2026/11/5 11:07:17

Python模块JSON与面向对象

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python模块JSON与面向对象

Python模块、JSON与面向对象

最后一篇,整理模块与包、JSON数据处理,还有面向对象的三大特性。面向对象部分内容比较多,慢慢看。


二十一、模块与包

一、什么是模块

Python 模块(Module)就是一个.py文件。模块里可以定义函数、类和变量,也能包含可执行的代码。

模块的作用:Python 中有各种各样的模块,每一个模块都可以帮助我们快速实现某些功能,不用每次都从零写起。

二、模块的导入方式

导入方式语法调用方式示例
导入整个模块import 模块名模块名.功能名()import time->time.sleep(1)
导入模块中的特定功能from 模块名 import 功能名直接使用功能名()from time import sleep->sleep(1)
导入模块中所有功能(不推荐)from 模块名 import *直接使用功能名()from time import *->sleep(1)
给模块起别名import 模块名 as 别名别名.功能名()import time as tt->tt.sleep(1)
给功能起别名from 模块名 import 功能名 as 别名别名()from time import sleep as sl->sl(1)

三、什么是包?

当模块文件越来越多时,我们需要用包来组织和管理它们。

  • 从物理上看:包是一个文件夹,里面必须有一个__init__.py文件(Python 3.3+ 可省略,但建议保留),该文件夹可以包含多个模块文件和子包。
  • 从逻辑上看:包的本质依然是模块,可以用来组织一堆功能相近的模块。
  • 包的作用:将模块归类,避免命名冲突,方便维护和复用。

四、导入包的方式

# 方式一:导入包中的指定模块importmy_package.module_afrommy_package.module_aimportfunc_name# 方式二:使用 from 包名 import *# 必须在 __init__.py 中定义 __all__ 列表,指定哪些模块可以被导入# my_package/__init__.py# __all__ = ["module_a"] # 只允许导入 module_afrommy_packageimport*module_a.func()# 可用# module_b.func() # 不可用

二十二、JSON数据

1. 什么是JSON

JSON是一种轻量级的数据交互格式。按照JSON指定的格式去组织和封装数据。

JSON本质上是一个带有特定格式的字符串。

主要功能:JSON就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。

各种编程语言存储数据的容器不尽相同,在Python中有字典dict这样的数据类型,而其它语言可能没有对应的字典。为了让不同的语言都能够相互通用的互相传递数据,JSON就是一种非常良好的中转数据格式。

2. JSON格式数据

JSON数据有两种形式:

  • 类似于字典类型:{"name": "admin", "age": 18}
  • 类似于列表类型:[{"name": "admin", "age": 18}, {"name": "小红", "age": 28}]

3. JSON数据与Python数据的相互转换

importjson# 准备符合JSON格式要求的Python数据data=[{"name":"老王","age":16},{"name":"张三","age":20}]# json.dumps() 将Python数据转化为JSON字符串data_json=json.dumps(data,ensure_ascii=False)print(type(data_json))print(data_json)# json.loads() 将JSON字符串转化为Python数据data_list=json.loads(data_json)print(type(data_list))print(data_list)

实际场景:把字典数据保存到文件,下次再读出来

importjson# 保存到文件data={"name":"张三","age":25,"scores":[90,85,92]}withopen("data.json","w",encoding="utf-8")asf:json.dump(data,f,ensure_ascii=False)# 从文件读取withopen("data.json","r",encoding="utf-8")asf:loaded_data=json.load(f)print(loaded_data)

二十三、面向对象

1. 什么是面向对象?

面向对象(OOP)是一种编程范式,它把程序看作由"对象"组成,每个对象具有属性(状态)和方法(行为)。

相比传统的面向过程编程,OOP 更强调:

  • 封装(Encapsulation):把数据和操作数据的方法绑定在一起,隐藏内部实现
  • 继承(Inheritance):子类可以继承父类的属性和方法,代码复用
  • 多态(Polymorphism):不同类对象可以使用相同方法名,实现不同功能

2. 类的定义和使用

# 创建类class类名称:类的属性 类的行为# 创建类对象对象=类名称()

3. 成员方法的定义语法

def方法名(self,形参1,形参2,...,形参n):方法体""" self关键字是成员方法定义的时候必须填写的 它用来表示类对象自身的意思 当我们使用类对象调用方法时,self会自动被python传入 在方法内部,想要访问类的成员变量,必须使用self """

4. 构造方法init:对象初始化

创建对象时若需同时给属性赋值,可使用构造方法。

构造方法__init__在对象创建时自动执行。

规则:

  • 方法名固定为__init__,双下划线开头结尾
  • 第一个参数必须是 self
  • 通过self.变量名定义的变量才是成员变量,可在整个对象中使用
classStudent:def__init__(self,name,age):self.name=name self.age=agedefinfo(self):print(f"姓名:{self.name}, 年龄:{self.age}")# 创建对象时传入参数stu=Student("李四",22)stu.info()# 姓名:李四, 年龄:22

5. 魔术方法

1.str:控制转字符串行为
classPerson:def__init__(self,name):self.name=namedef__str__(self):returnf"Person({self.name})"p=Person("王五")print(p)# 输出:Person(王五) 而不是内存地址
2.lt/le/eq:比较运算符
classStudent:def__init__(self,score):self.score=scoredef__lt__(self,other):# < 和 > 都基于此returnself.score<other.scoredef__le__(self,other):# <= 和 >= 都基于此returnself.score<=other.scoredef__eq__(self,other):# == 和 !=returnself.score==other.score s1=Student(90)s2=Student(85)print(s1<s2)# False(90 < 85 为假)print(s1==s2)# False

实现了__lt__,对象就可以直接用<、>比较;__le__覆盖<=、>=;__eq__覆盖==、!=。
不实现时,对象间比较的是内存地址。

6. 封装

封装:将事物的属性和行为包装在类中,只暴露需要公开的部分,隐藏内部实现细节。

成员类型命名方式访问范围示例
公有普通名称类内、类外均可self.name
受保护(约定)单下划线_类内和子类(约定)self._age
私有双下划线__仅类内(通过名称修饰)self.__password
classPerson:def__init__(self,name,age):self.name=name# 公有属性self.__age=age# 私有属性defeat(self):print("我现在需要吃饭")def__study(self):# 私有方法print("我现在开始学习")per=Person("张三",19)print(per.name)# 张三# print(per.__age) # 报错:AttributeErrorper.eat()# 我现在需要吃饭# per.__study() # 报错,外部无法调用私有方法

7. 继承

子类可以继承父类的成员变量和方法(不包含私有成员)

1. 单继承
classAnimal:defeat(self):print("吃东西")classDog(Animal):# Dog继承Animaldefbark(self):print("汪汪")dog=Dog()dog.eat()# 继承父类的方法 -> 吃东西dog.bark()# 汪汪
2. 多继承与优先级

Python 支持多继承,当多个父类有同名方法时,按继承顺序从左至右优先(MRO法则)。

classA:definfo(self):print("A")classB:definfo(self):print("B")classC(A,B):# 先继承A,后继承Bpassc=C()c.info()# 输出:A
3. 重写(Override)与调用父类方法
classFather:defsay(self):print("Father says")classSon(Father):defsay(self):# 重写print("Son says")# 调用父类的 say 方法super().say()# 或 Father.say(self)son=Son()son.say()# 输出:# Son says# Father says

8. 多态

多态指同一个行为,不同的对象表现不同。常配合继承使用:函数参数声明接收父类对象,实际可传入不同子类对象,从而获得不同行为。

classAnimal:defspeak(self):passclassDog(Animal):defspeak(self):print("汪汪")classCat(Animal):defspeak(self):print("喵喵")defanimal_speak(animal):animal.speak()animal_speak(Dog())# 汪汪animal_speak(Cat())# 喵喵

9. 抽象类

父类仅定义方法框架,不实现具体功能(用pass),强迫子类必须复写。这种父类称为抽象类,方法称为抽象方法。

classShape:defarea(self):pass# 抽象方法classRectangle(Shape):def__init__(self,w,h):self.w=w self.h=hdefarea(self):returnself.w*self.hclassCircle(Shape):def__init__(self,r):self.r=rdefarea(self):return3.14*self.r**2

10. 子类访问父类的私有属性和方法

classParent:def__init__(self):self.__secret="私有数据"# 私有属性def__private_method(self):print("父类私有方法被调用")# 提供公有接口访问私有属性defget_secret(self):returnself.__secretdefset_secret(self,value):self.__secret=valueclassChild(Parent):deftest(self):# 通过父类提供的公有方法访问print(self.get_secret())# 输出:私有数据self.set_secret("子类修改了")print(self.get_secret())# 输出:子类修改了# 注意:不能直接 self.__secret,会报错# print(self.__secret) # AttributeErrorc=Child()c.test()

以上就是Python基础语法的完整整理,希望能帮到你。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 10:09:30

AI编程技术债如何从源头杜绝?标准代码生成器的规范落地实践

做了这么多期“CleanCode AI编程标准代码生成器”的系列实践&#xff0c;我最深的一个感受是&#xff1a;问题的核心从来不是AI能不能写代码&#xff0c;而是AI写完的那一坨东西&#xff0c;三个月之后还改不改得动。市面上各种AI编程软件越来越强大&#xff0c;Codex、Copilot…

作者头像 李华
网站建设 2026/10/23 21:20:20

Surface Studio 1代换SSD实战:从拆机到系统迁移全记录

这台Surface Studio 1代从2017年跟到现在&#xff0c;28寸触控屏放到今天依然能打&#xff0c;真正逼我动手换SSD的&#xff0c;不是容量&#xff0c;而是系统各种“肉”&#xff1a;开机转圈、Teams启动半天、OneDrive一同步磁盘占用就100%。查了一圈资料&#xff0c;中文社区…

作者头像 李华
网站建设 2026/11/2 3:01:26

拟南芥种植

第一步&#xff1a;种子春化处理种子萌发前需要做春化处理的&#xff0c;春化处理需要把要播种的种子放入ep 管中&#xff0c;加入纯水&#xff0c;振荡使充分侵泡&#xff0c;放入 4 度冰箱保存 3 天即可&#xff0c;完成春化。第二步&#xff1a;准备培育基质(营养土&#xf…

作者头像 李华
网站建设 2026/10/23 18:05:34

大模型上下文管理实战:context-mode三种模式解析

做AI工具的人应该都有过类似的体验&#xff1a;模型回答得“驴唇不对马嘴”&#xff0c;你前一句话它还记得&#xff0c;隔了几轮它就像失忆了一样。尤其是本地跑大模型、写自动化脚本或者做个人知识库助手的时候&#xff0c;这个问题特别明显。我自己维护的一个本地开发辅助工…

作者头像 李华