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) |
|---|---|---|
| 定义方式 | def | class |
| 用途 | 执行某个功能 | 创建对象模板 |
| 数据保存 | 没有状态,执行完就结束 | 可保存多个属性和方法 |
| 是否能多次独立使用 | 每次执行都是独立的 | 可以创建多个对象实例 |
| 示例 | 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 |
| 结构 | 分散的函数 | 封装在一个“账户”对象中 |
| 可扩展性 | 难以增加功能 | 可以加方法(比如利息、转账) |
| 可读性 | 零散 | 清晰、有组织 |
🧩 小结:
🔹 函数 = 动作 🔹 类 = 模型 + 属性 + 动作(更像现实事物)