Python 异步与面向对象:从“指令”到“架构”的范式跃迁

📅 2026/8/1 6:20:57 👁️ 阅读次数 📝 编程学习
Python 异步与面向对象:从“指令”到“架构”的范式跃迁

文章目录

序幕:代码的两次进化

第一模块:异步编程 —— 让代码学会“一心多用”

1.1 同步 vs 异步:从“排队”到“并行等待”

同步:你点了一杯咖啡,站着干等

异步:同时下单,谁先好先拿谁

1.2 三大核心概念

1.3 关键语法对比表

第二模块:面向对象 —— 从函数到蓝图,从蓝图到生命

2.1 为什么需要面向对象?

2.2 类与对象:蓝图与实体的关系

2.3 类的定义与实例化

2.4 __init__ 初始化方法 —— 对象诞生的第一声啼哭

self 是什么?

2.5 完整示例:一个活的学生类

2.6 类的属性与实例的属性

🎯 今日核心知识速查

异步模块

面向对象模块

终章:你站在了哪里



序幕:代码的两次进化

如果把写代码比作盖房子,那你之前学的东西——变量、函数、循环、装饰器——都是在搬砖。你把一块块砖码得整整齐齐,房子能住人,但经不起大风大浪。

今天我们要完成两次跃迁:

第一次跃迁:异步编程—— 把代码从“单线程苦力”变成“多任务总管”。以前你写代码是干完一件事再干下一件,现在你能同时等好几件事,谁先准备好就先处理谁,效率直接拉满。

第二次跃迁:面向对象编程(OOP)—— 把代码从“一堆散装函数”变成“一个有血有肉的系统”。你不再写“先做A再做B再做C”,而是创造一个世界,里面住着各种“对象”,它们各有属性、各有技能,互相协作完成目标。

如果说之前的你是个会写脚本的程序员,今天之后,你就是一个能设计系统的架构师

这不是风格的微调,是维度的提升。准备好了吗?开始。🚀


第一模块:异步编程 —— 让代码学会“一心多用”

1.1 同步 vs 异步:从“排队”到“并行等待”

同步:你点了一杯咖啡,站着干等

python

import time def make_coffee(): time.sleep(3) # 咖啡机工作3秒 return "☕ 咖啡好了" def toast_bread(): time.sleep(2) # 烤面包机工作2秒 return "🍞 吐司好了" def breakfast(): coffee = make_coffee() # 先做咖啡,干等3秒 toast = toast_bread() # 再做吐司,干等2秒 return coffee, toast start = time.time() print(breakfast()) print(f"总耗时:{time.time() - start:.1f}秒")

输出:

text

('☕ 咖啡好了', '🍞 吐司好了') 总耗时:5.0秒

📌 同步的问题是:CPU在等,但你无能为力。咖啡机工作的时候,CPU什么都不干,就在那儿等着。5秒钟做两件事,效率极低。

异步:同时下单,谁先好先拿谁

python

import asyncio async def make_coffee(): await asyncio.sleep(3) # 模拟等待,但CPU不闲着 return "☕ 咖啡好了" async def toast_bread(): await asyncio.sleep(2) return "🍞 吐司好了" async def breakfast(): # 同时发起两个任务 coffee_task = asyncio.create_task(make_coffee()) toast_task = asyncio.create_task(toast_bread()) # 等待两个都完成 coffee = await coffee_task toast = await toast_task return coffee, toast start = time.time() result = asyncio.run(breakfast()) print(result) print(f"总耗时:{time.time() - start:.1f}秒")

输出:

text

('☕ 咖啡好了', '🍞 吐司好了') 总耗时:3.0秒

📌 异步的威力:同时发起两个任务,总耗时等于最慢的那个,而不是相加。咖啡3秒,吐司2秒,总耗时3秒。省了2秒。

1.2 三大核心概念

概念写法作用
异步函数async def func():定义一个可暂停的函数
等待await 异步操作在异步函数里等待另一个异步操作完成
任务asyncio.create_task()把一个异步函数包装成“可并发执行的任务”

1.3 关键语法对比表

同步写法异步写法区别
def func():async def func():函数变“异步”
time.sleep(1)await asyncio.sleep(1)等待时不阻塞
result = func()result = await func()等待异步结果
func()asyncio.run(func())启动异步入口

第二模块:面向对象 —— 从函数到蓝图,从蓝图到生命

2.1 为什么需要面向对象?

你之前写的代码,都是“先做A,再做B,再做C”的过程式代码。函数多了之后,你会发现:

  • 数据到处乱飞,不知道哪个函数改了哪个变量

  • 想复用一段逻辑,复制粘贴改来改去

  • 需求一变,改一个地方要牵连十几个函数

面向对象编程(OOP)把世界拆解成“对象”。每个对象有自己的属性(数据)方法(行为)。对象之间通过消息通信,各司其职。

📌 打个比方:面向对象不是“做菜流程”,而是“一个厨房”。厨房里有厨师、烤箱、冰箱、刀具。每个东西都有自己的属性和功能,你只需要说“做一顿饭”,它们自己协作完成。

2.2 类与对象:蓝图与实体的关系

概念比喻代码层面
类(Class)建筑图纸class Student:
对象(Object)根据图纸盖出来的楼s1 = Student()
属性(Attribute)楼的高度、颜色s1.name = "小明"
方法(Method)楼能干什么(开灯、关门)s1.study()

类是抽象的模板,对象是具体的实体。一份图纸可以盖一万栋楼,一个类可以创建无数个对象。

2.3 类的定义与实例化

python

class Student: """学生类 —— 所有学生的蓝图""" pass # 实例化:根据蓝图创造具体的学生 s1 = Student() s2 = Student() print(s1) # <__main__.Student object at 0x...> print(s2) # <__main__.Student object at 0x...>

2.4__init__初始化方法 —— 对象诞生的第一声啼哭

__init__是 Python 里的构造方法,在对象被创建时自动调用,用来给对象设置初始属性。

python

class Student: def __init__(self, name, age, score): """初始化方法:对象诞生时自动执行""" self.name = name # 属性:姓名 self.age = age # 属性:年龄 self.score = score # 属性:分数 # 创建对象时,传入的参数会自动交给 __init__ s1 = Student("王小明", 18, 95) s2 = Student("李小红", 19, 88) print(s1.name) # 王小明 print(s2.name) # 李小红

self是什么?

self代表当前对象本身。调用s1.study()时,self就是s1;调用s2.study()时,self就是s2

text

s1 = Student("王小明", 18) ↓ __init__(self, name, age) ↓ self = s1 self.name = "王小明" self.age = 18

2.5 完整示例:一个活的学生类

python

class Student: """学生类 —— 包含属性、方法、内部逻辑""" def __init__(self, name, age, score): self.name = name self.age = age self.score = score self.is_active = True # 默认属性 def study(self, hours): """学习方法:传入学习时长""" self.score += hours * 0.5 print(f"{self.name} 学习了 {hours} 小时,分数提升到 {self.score:.1f}") def info(self): """打印学生信息""" status = "在读" if self.is_active else "已毕业" print(f"姓名:{self.name},年龄:{self.age},成绩:{self.score},状态:{status}") # 使用 s1 = Student("王小明", 18, 80) s2 = Student("李小红", 19, 75) s1.study(5) # 王小明 学习了 5 小时,分数提升到 82.5 s1.info() # 姓名:王小明,年龄:18,成绩:82.5,状态:在读

2.6 类的属性与实例的属性

python

class School: # 类属性:属于类本身,所有实例共享 school_name = "Python 中学" total_students = 0 def __init__(self, name): # 实例属性:属于每个对象自己 self.name = name School.total_students += 1 print(School.school_name) # Python 中学(类属性,不依赖实例) s1 = School("王小明") s2 = School("李小红") print(s1.name) # 王小明(实例属性,每个对象不同) print(School.total_students) # 2(类属性,记录了总人数)

🎯 今日核心知识速查

异步模块

概念写法作用
异步函数async def func():定义异步函数
等待操作await asyncio.sleep(1)非阻塞等待
创建任务asyncio.create_task()包装为并发任务
启动入口asyncio.run(main())运行异步程序

面向对象模块

概念写法作用
定义类class Student:创建蓝图
构造方法def __init__(self):初始化对象
实例属性self.name = name每个对象独有的数据
类属性class_var = 10所有实例共享
实例方法def study(self):对象的行为
实例化s = Student()根据蓝图创建对象
self方法第一个参数指向当前对象

终章:你站在了哪里

今天,你完成了两次跃迁。

异步让你摆脱了“等待”的束缚,程序不再是单线程苦力,而是能同时盯着多个任务的总管。

面向对象让你摆脱了“散装函数”的束缚,代码不再是堆积木,而是搭建系统。你开始设计蓝图、创造对象、让它们各司其职、互相协作。

如果你能理解并运用今天的内容,你就已经从一个“写脚本的人”,变成了一个“设计系统的人”。这是程序员成长路上最重要的一道分水岭。

你手里的,不再是砖块,是蓝图。你面前的,不再是页面,是架构。

架构师,你好。下期见。👋🐍