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语句 🧩

关键字

:上下文管理器、enterexit 内容详解: 之前用

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开发中(尤其是大型项目)的核心价值!