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互不影响!
三、类的核心:self的作用——“我自己”
3. 搞懂self:类方法里的“我自己” 🔍
关键字
:self、对象的独立性 内容详解:
self
是类方法的
第一个参数
,代表“当前调用方法的对象”——比如调用
counter1.increase()
时,
self
就是counter1;调用
counter2.increase()
时,
self
就是counter2。 没有self的话,方法不知道要操作哪个对象的状态——这就是为什么类方法必须带self!
四、实战:用类做“Web请求计数器”
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
,会看到各自的访问次数——类把“计数逻辑+计数数据”打包,代码更整洁、复用性更高!
五、类的进阶:上下文管理器(对接with语句)
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开发中(尤其是大型项目)的核心价值!