class 是将数据和行为封装为可复用、可扩展、可维护单元的机制,解决函数式编程中逻辑重复、状态分散、协作困难等问题,并支持自然建模实体关系、继承多态、访问控制与生命周期管理。

Class 语法不是“更高级的函数”,而是把数据和行为打包成可复用、可扩展、可维护的单元。它解决的核心问题是:当逻辑变多、状态变复杂、协作变频繁时,纯函数式组织容易重复、分散、难追踪。
避免重复逻辑与状态管理混乱
函数式写法中,相似功能常靠复制粘贴或反复传参实现。比如监控多个资源(CPU、磁盘、内存)并统一发邮件:
- 每个判断块都要手动写连接邮箱、构造内容、关闭连接;
- 阈值、收件人、模板等配置散落在各处,改一处容易漏一处;
- 新增一个监控项(如GPU温度),就得再复制一整段流程。
用 Class 封装后,这些共性被提取到类中:
def __init__(self, threshold=90, recipients=None):
self.threshold = threshold
self.recipients = recipients or ["admin@example.com"]
def send_email(self, resource, usage):
# 统一封装邮件逻辑
print(f"Alert: {resource} usage {usage}%")
cpu_monitor = MonitorAlert(threshold=85)
disk_monitor = MonitorAlert(threshold=92, recipients=["ops@example.com"])
cpu_monitor.send_email("CPU", 94)
disk_monitor.send_email("Disk", 96)
自然表达“谁拥有什么、能做什么”
现实中的实体有明确归属关系:一辆车有品牌、型号、油量,能启动、加速、刹车;一个用户有昵称、积分、登录态,能下单、收藏、退出。Class 让这种关系直接映射到代码结构里:
-
属性(如
self.name、self.balance)表示“属于这个对象的状态”; -
方法(如
self.withdraw()、self.update_profile())表示“这个对象自己能执行的动作”; - 无需再靠函数参数传递一堆上下文变量,self 自动携带全部上下文。
为继承、多态和模块协作打下基础
单个脚本用函数也能跑通,但项目一旦变大,就需要分层抽象。Class 提供了清晰的扩展路径:
- 不同爬虫共享基础逻辑(请求、解析、重试),各自实现
parse_page()—— 这是多态; - Scrapy 的
Spider类本身就是典型:你只写子类,框架自动调用父类封装好的调度、下载、管道流程; - 团队协作时,别人只需看类接口(哪些属性公开、哪些方法可调),不用翻遍所有函数定义就能安全使用。
类内可封装访问控制与生命周期管理
函数没有“私有”概念,所有变量都暴露在外。Class 支持通过命名约定(如 _internal)或装饰器(如 @property、@classmethod)约束使用方式:
- 用
@property把计算逻辑包装成属性访问,隐藏实现又保持简洁调用; - 用
__init__集中初始化资源(如打开文件、建立数据库连接),用__del__或上下文管理确保清理; - 静态方法(
@staticmethod)和类方法(@classmethod)明确区分“工具函数”“工厂函数”与“实例行为”的边界。











