当前位置:首页>python>【Python】Day22:面向对象基础——类与对象

【Python】Day22:面向对象基础——类与对象

  • 2026-10-11 05:47:29
【Python】Day22:面向对象基础——类与对象

🎯 学习目标

  1. 理解面向对象的核心概念:类是图纸,对象是按图纸造出的实物
  2. 掌握类的定义语法:class、__init__、self
  3. 理解self的本质:代表对象自己,访问属性和方法必须加self
  4. 能区分 实例属性(每个对象独有)和 实例方法(对象的行为)
  5. 能用类封装简单的功能模块,如一个大模型调用的客户端类

一、为什么需要面向对象?

  1. 从"动词"思维到"名词"思维
    # 面向过程:函数操作散落的数据dog1_name = "旺财"defbark1(name):    print(f"{name}:汪汪!")# 面向对象:数据和行为封装在一起classDog:defbark(self):        print(f"{self.name}:汪汪!")
    • 面向过程:关注步骤——先做什么,再做什么(前面的函数式写法)
    • 面向对象:关注谁来做——把数据和操作数据的方法打包在一起
  2. 类与对象的关系
    • 类:设计图纸、模具(抽象的)
    • 对象:根据图纸造出来的产品(具体的)

二、定义类与创建对象

  1. 基本语法
    classDog:"""这是一个狗的类"""# 类文档pass# 创建对象(实例化)dog1 = Dog()dog2 = Dog()print(type(dog1))    # <class '__main__.Dog'>
  2. __init__ 方法:初始化(构造方法)
    classDog:def__init__(self, name, age):# self.属性名 = 参数        self.name = name     # 实例属性        self.age = age        print(f"{name}出生了!")dog1 = Dog("旺财", 3)    # 旺财出生了!自动调用 __init__dog2 = Dog("小白", 1)    # 小白出生了!
    • 对象被创建时自动调用,用来设置初始属性
    • 第一个参数必须是self

三、self:代表对象自己

  1. 为什么要用self?
    classDog:def__init__(self, name):        self.name = namedefbark(self):# 通过 self 访问当前对象的属性        print(f"{self.name}:汪汪!")dog1 = Dog("旺财")dog2 = Dog("小白")dog1.bark()    # 旺财:汪汪!  self 是 dog1dog2.bark()    # 小白:汪汪!  self 是 dog2
    • Python 用self告诉方法:"你在操作哪个对象的数据"
  2. self本质上是对象的引用
    # dog1.bark() 实际上等价于:Dog.bark(dog1)

四、实例属性与实例方法

  1. 实例属性:每个对象各自拥有的数据
    classStudent:def__init__(self, name, score):        self.name = name        self.score = scores1 = Student("小王", 92)s2 = Student("小李", 85)print(s1.score)    # 92print(s2.score)    # 85# 可以动态添加属性(但不推荐)s1.city = "北京"
  2. 实例方法:对象的行为
    classStudent:def__init__(self, name, score):        self.name = name        self.score = scoredefget_grade(self):if self.score >= 90:return"A"elif self.score >= 80:return"B"else:return"C"defstudy(self, hours):        self.score = min(100, self.score + hours * 2)        print(f"{self.name}学习了{hours}小时,分数变为{self.score}")s1 = Student("小王", 88)print(s1.get_grade())    # Bs1.study(3)              # 小王学习了3小时,分数变为94print(s1.get_grade())    # A

五、实战:封装大模型客户端类

classChatClient:"""模拟大模型聊天客户端"""def__init__(self, model_name, api_key):        self.model_name = model_name        self.api_key = api_key        self.history = []    # 每个客户端有自己的历史记录defsend_message(self, user_input):# 模拟发送请求        print(f"[{self.model_name}] 发送消息:{user_input}")        self.history.append({"role": "user", "content": user_input})# 模拟API返回        reply = f"收到!你说的是:{user_input}"        self.history.append({"role": "assistant", "content": reply})return replydefshow_history(self):for msg in self.history:            print(f"  {msg['role']}: {msg['content']}")# 使用client = ChatClient("gpt-3.5-turbo", "sk-xxx")client.send_message("你好!")client.send_message("今天天气怎么样?")client.show_history()

⚠️ 常见坑

  1. 忘记写self
    classDog:def__init__(name):# ❌ 忘记 selfpass# TypeError: __init__() takes 1 positional argument but 2 were givendef__init__(self, name):# ✅    self.name = name
  2. 调用方法时手动传self
    dog1 = Dog("旺财")# dog1.bark(dog1)   # ❌ 不需要传 selfdog1.bark()         # ✅ Python 自动传
  3. 在 __init__ 外面直接定义属性
    classDog:# name = "旺财"  # 这是类属性,所有对象共享!def__init__(self, name):        self.name = name  # ✅ 实例属性,每个对象独立

✍️ 实战练习

  1. 银行账户类
    • 要求:创建BankAccount类,有owner、balance 属性,有deposit()、withdraw()、check_balance() 方法。
    • 示例:
      classBankAccount:def__init__(self, owner, balance=0):        self.owner = owner        self.balance = balancedefdeposit(self, amount):        self.balance += amount        print(f"存入{amount},余额{self.balance}")defwithdraw(self, amount):if amount > self.balance:            print("余额不足!")else:            self.balance -= amount            print(f"取出{amount},余额{self.balance}")defcheck_balance(self):        print(f"{self.owner}的余额:{self.balance}")acc = BankAccount("小王", 1000)acc.deposit(500)acc.withdraw(200)acc.check_balance()

✅ 自测清单

  • [ ] 能解释"类是图纸,对象是产品"
  • [ ] 能用class 定义类,用__init__初始化属性
  • [ ] 理解self代表对象自己,访问属性和方法必须加self
  • [ ] 能区分实例属性(每个对象独立)和类属性(所有对象共享)
  • [ ] 能用类封装带状态的功能(如带历史的聊天客户端)

最新文章

随机文章