1. 类的本质:行为 + 状态的“打包容器”🤔
之前写代码,“数据(状态)”和“操作数据的代码(行为)”是分开的——比如变量存“计数器数值”,函数写“计数器自增”。而 类是把“状态 + 行为”打包成一个“对象”,像给事物做“专属模板”:
类比:“类”是“手机模板”,规定了手机要有“电量(状态)”和“充电 / 打电话(行为)”;“对象”是具体的某部手机(比如你的 iPhone),有自己的电量,能执行充电操作~
2. 类的入门:定义类 + 创建对象——像做“模板 + 实例”🛠️
关键字:类定义、__init__方法、self、对象实例
内容详解:
用 class 定义类,__init__方法是“初始化状态”的入口,self代表“当前对象”。比如做一个“计数器类”:
# 定义类:Counter 是类名
class Counter:
# __init__:初始化对象的状态(属性)def __init__(self, start_val=0):
self.val = start_val # self.val 是对象的“状态(属性)”# 定义行为(方法):计数器自增
def increase(self):
self.val += 1 # 操作当前对象的 val 属性
# 创建对象(实例):用类模板造具体的计数器
counter1 = Counter(start_val=10) # 初始值 10
counter2 = Counter() # 用默认初始值 0
操作对象超简单——调用它的方法,访问它的属性:
# 调用 counter1 的 increase 方法(执行行为)counter1.increase()
# 访问 counter1 的 val 属性(看状态)print("counter1 当前值:", counter1.val) # 输出 11
# 操作 counter2
counter2.increase()
counter2.increase()
print("counter2 当前值:", counter2.val) # 输出 2
注意:不同对象的状态是独立的——counter1 和 counter2 的 val 互不影响!
3. 搞懂 self:类方法里的“我自己”🔍
关键字:self、对象的独立性
内容详解:
self是类方法的 第一个参数 ,代表“当前调用方法的对象”——比如调用counter1.increase() 时,self就是 counter1;调用 counter2.increase() 时,self就是 counter2。
没有 self 的话,方法不知道要操作哪个对象的状态——这就是为什么类方法必须带 self!
4. 类的实战:给 Web 应用加“专属计数器”🕸️
关键字:类的实际应用、Flask+ 类
内容详解:
结合 Flask,用类做一个“记录不同页面访问次数”的计数器:
from flask import Flask
app = Flask(__name__)
# 定义“页面访问计数器”类
class PageCounter:
def __init__(self):
# 用字典存“页面路径: 访问次数”(状态)self.page_counts = {}
# 记录页面访问的方法(行为)def count(self, page_path):
if page_path not in self.page_counts:
self.page_counts[page_path] = 0
self.page_counts[page_path] += 1
return self.page_counts[page_path]
# 创建计数器对象(整个 Web 应用共用一个)page_counter = PageCounter()
# 首页:调用计数器记录访问
@app.route("/")
def home():
current_count = page_counter.count("/")
return f"首页访问次数:{current_count}"
# 关于页:同样记录
@app.route("/about")
def about():
current_count = page_counter.count("/about")
return f"关于页访问次数:{current_count}"
if __name__ == "__main__":
app.run(debug=True)
现在访问 / 和/about,会看到各自的访问次数——类把“计数逻辑 + 计数数据”打包,代码更整洁、复用性更高!
5. 类的高级用法:做上下文管理器——对接 with 语句 🧩
关键字:上下文管理器、__enter__、__exit__
内容详解:
之前用 with open() 是因为文件对象实现了“上下文管理器”。我们也可以用类做自己的上下文管理器(比如“自动连接 / 关闭数据库”):
import mysql.connector
# 定义“数据库连接上下文管理器”类
class DBConnector:
def __init__(self, host, user, password, database):
self.host = host
self.user = user
self.password = password
self.database = database
self.conn = None
# with 语句开始时执行:连接数据库
def __enter__(self):
self.conn = mysql.connector.connect(
host=self.host,
user=self.user,
password=self.password,
database=self.database
)
return self.conn # 返回给 with 语句的变量
# with 语句结束时执行:关闭连接
def __exit__(self, exc_type, exc_val, exc_tb):
if self.conn:
self.conn.close()
# 使用上下文管理器:自动连接 / 关闭数据库
with DBConnector(
host="localhost",
user="root",
password="你的密码",
database="web_log_db"
) as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM access_log LIMIT 1")
result = cursor.fetchone()
print("数据库查询结果:", result)
这样不用手动关数据库连接——类帮你把“资源的打开 / 关闭”自动化,代码更安全!
6. 类的价值:让代码“模块化、易维护”🚀
关键字:代码模块化、可扩展性
内容详解:
不用类的代码是“散装的”——数据和逻辑分散,改一个功能要找很多地方。用类把“相关的状态 + 行为”打包后:
- 📦 模块化:功能集中,找代码、改代码更方便;
- 🔧 易扩展 :想给计数器加“重置”功能,只需要给类加一个
reset()方法; - 🤝 易复用:写好的类可以在多个项目里直接用(比如上面的 DBConnector)。
这就是类在 Python 开发中(尤其是大型项目)的核心价值!