一点点类——抽象行为和状态:Python的“对象打包术” 📦

200次阅读

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

正文完
 0