python的类(class)


python的类(class)

🧩 一句话理解:

类(class) 就是创建“对象”的“模板”。 函数(function) 是执行一段操作的“工具”。


🧠 举个生活例子:

想象你在做一个“猫”的程序。

  • 函数:就像是“猫会喵喵叫”的动作。
  • :是“猫”这个完整的概念模板,它不仅能“喵喵叫”,还可以有“名字”“颜色”“年龄”等属性。

🐾 先看函数:

def greet(name):
    print(f"你好,我是{name}!")

greet("小明")
# 输出:你好,我是小明!

➡️ 函数只能执行动作,执行完就结束了。 没有“状态”或“记忆”。


🏗️ 再看类:

class Cat:
    # 构造函数(初始化时自动执行)
    def __init__(self, name, color):
        self.name = name      # 属性
        self.color = color

    # 方法(相当于函数)
    def meow(self):
        print(f"{self.name} 喵喵叫!")

# 创建两个猫对象(实例)
cat1 = Cat("小花", "白色")
cat2 = Cat("小黑", "黑色")

cat1.meow()  # 小花 喵喵叫!
cat2.meow()  # 小黑 喵喵叫!

🔍 区别总结表:

对比点函数(function)类(class)
定义方式defclass
用途执行某个功能创建对象模板
数据保存没有状态,执行完就结束可保存多个属性和方法
是否能多次独立使用每次执行都是独立的可以创建多个对象实例
示例def greet(): ...class Cat: ...

🎯 类的关键语法结构:

class 类名:
    def __init__(self, 参数):   # 构造函数(初始化属性)
        self.属性 = 参数

    def 方法(self):             # 定义行为
        ...
  • self:代表“这个对象自己”
  • __init__():在创建对象时自动运行,用来“初始化”数据
  • “类的方法”就是“函数”,只是写在类里面,并带有 self

💡 你可以这样理解:

概念类比
类(class)模板、图纸
对象(instance)实际造出来的东西(房子、猫、车)
属性(attribute)特征(颜色、名字、型号)
方法(method)行为(跑、叫、开动)

如果你想,我可以接着帮你写一个:

✅ 从函数版本 → 改写成类版本的例子 让你实际感受到“类”为什么更方便、结构更清晰。

太好了 👍 我们就用一个现实又简单的例子来感受: 用“银行账户”来说明从函数版 → 类版的转变。


💰 一、函数版本:只靠函数操作数据

# 用变量保存账户余额
balance = 0

def deposit(amount):
    global balance
    balance += amount
    print(f"存入 {amount} 元,当前余额:{balance}")

def withdraw(amount):
    global balance
    if balance >= amount:
        balance -= amount
        print(f"取出 {amount} 元,当前余额:{balance}")
    else:
        print("余额不足!")

# 使用
deposit(100)
withdraw(30)

📋 问题:

  • 所有函数都依赖一个全局变量 balance
  • 如果想要两个账户(比如我和你各一个),就麻烦了——要复制一套函数或变量。

🏦 二、类版本:更像现实世界的“账户对象”

class BankAccount:
    def __init__(self, owner):     # 初始化账户
        self.owner = owner        # 账户持有人
        self.balance = 0          # 初始余额

    def deposit(self, amount):
        self.balance += amount
        print(f"{self.owner} 存入 {amount} 元,当前余额:{self.balance}")

    def withdraw(self, amount):
        if self.balance >= amount:
            self.balance -= amount
            print(f"{self.owner} 取出 {amount} 元,当前余额:{self.balance}")
        else:
            print(f"{self.owner} 余额不足!")

# 创建两个账户对象(各自独立)
acc1 = BankAccount("小明")
acc2 = BankAccount("小红")

acc1.deposit(100)
acc2.deposit(200)
acc1.withdraw(50)

💡 输出:

小明 存入 100 元,当前余额:100
小红 存入 200 元,当前余额:200
小明 取出 50 元,当前余额:50

📊 对比总结:

对比点函数版类版
数据保存全局变量(一个balance)每个对象有自己的balance
结构分散的函数封装在一个“账户”对象中
可扩展性难以增加功能可以加方法(比如利息、转账)
可读性零散清晰、有组织

🧩 小结:

🔹 函数 = 动作 🔹 类 = 模型 + 属性 + 动作(更像现实事物)