当前位置: 首页 > news >正文

Python进阶 面向对象基础

Python进阶 面向对象基础与封装

一. 什么是面向对象

1. [了解]常见的编程思想
  • 面向过程 (Process Oriented):关注“步骤”。解决问题时,把需要的步骤列出来,按步骤一步步实现代码。
    • 生活类比:把大象装进冰箱,分三步(开门、装大象、关门)。适合简单微型项目。
  • 面向对象 (Object Oriented):关注“对象”。把现实事物抽象成对象,关注对象具备的功能和属性。
    • Python是同时支持面向过程面向对象的编程语言!
2. [理解]什么是面向对象
  • 核心理念万物皆对象!宗旨在于模拟现实世界,使编程与实际世界更加接近,让代码更富有人性化。

二. 面向对象基本概念

1. [掌握]类和对象
  • 类 (Class):对一系列具有相同特征(属性)和行为(方法)的事物的统称。
    • 特点:它是抽象的,不能直接使用。(相当于一张汽车设计图纸)
  • 对象 (Object):由类创建出来的一个具体存在。
    • 特点:它是具体的,可以直接使用。(相当于根据图纸造出来的、停在楼下的那辆真车)
  • 核心关系先有类,再有对象
2. [掌握]类的定义和对象的创建
  • 定义类:使用class关键字。
    class类名():def方法名(self):print("执行行为...")

    [规范提醒]:类名推荐使用大驼峰命名法(如 MyClass、SweetPotato)。

  • 创建对象
    对象名=类名()
3. [掌握]self 关键字
  • 本质:self 指向的是调用该方法的对象本身
  • 白话解释:谁调用这个方法,self 就代表谁。
  • [例]比如stu1.introduce()时,self指向stu1stu2.introduce()时,self指向stu2

三. 对象的属性

1. [掌握]添加和获取对象属性
  • 类外部操作
    • 添加属性:对象名.属性名 = 值
    • 获取属性:print(对象名.属性名)
  • 类内部操作
    • 获取/使用属性:self.属性名
  • [避坑指南]:强烈不推荐在类外部强行给对象添加属性!这会导致不同对象之间的属性结构不统一,极易引发 Bug。推荐在类的内部(init方法中)统一定义。

四. 魔法方法

1. [掌握]init魔法方法
  • 概念:Python 中具有特殊功能、以双下划线开头和结尾的方法叫魔法方法。
  • 触发时机:创建对象时自动调用
  • 作用:专门用于给对象初始化属性(就像婴儿一出生自带性别、血型一样)。
2. [掌握]带参数的init方法
  • 场景说明:如果全班同学都用同一个类创建,怎么保证每个人创建出来名字不一样呢?就需要传参。
  • 作用:让不同的对象在创建时,就能拥有自己特有的属性值。
  • 代码演示
    classStudent:def__init__(self,name):self.name=name# 把外部传入的name参数,保存为当前对象的属性
3. [掌握]str魔法方法
  • 触发时机:当使用 print(对象) 时自动调用。
  • 作用:返回一个字符串,用于描述对象的信息,必须要有return
  • [面试点]:如果不写str,直接 print(对象) 会输出什么?(答:会输出该对象在内存中的十六进制地址空间)。
4. [了解]del魔法方法
  • 触发时机:对象被销毁(从内存中删除,如执行del 对象名程序运行结束释放内存)时自动调用。

五. 面向对象综合案例

1. [掌握]案例一:减肥案例(对象属性的动态变化)
  • (1) 基本需求
    定义一个学生类(姓名,体重)。学生具备跑步(减重)和吃东西(增重)的行为。要求调用行为后,打印出当前的体重状态。
  • (2) 步骤分析 (SOP)
    1. 定义 Student 类,写init接收姓名和初始体重。
    2. 写 run 方法:每次跑步,体重减小 (-=)1kg。
    3. 写 eat 方法:每次吃喝,体重增加 (+=)2kg。
  • (3) 代码实现
    classStudent:def__init__(self,name,weight):self.name=name self.current_weight=weightdefrun(self):self.current_weight-=1# 状态改变print(f"{self.name}去跑步了,减重1kg,当前体重为:{self.current_weight}kg。")defeat(self):self.current_weight+=2# 状态改变print(f"{self.name}大吃大喝一顿,增加2kg,当前体重为:{self.current_weight}kg。")# 测试验证student=Student("小明",75)student.run()student.eat()
2. [掌握]案例二:烤地瓜综合案例
  • (1) 基本需求
    用户按意愿设定烤制时间,系统判断状态(0-3分生的,3-7分半生不熟,7-12分熟,>12分糊);用户可添加调料。要求能直接打印地瓜状态。
  • (2) 步骤分析 (SOP)
    1. 定义 SweetPotato 类。
    2. init初始化:被烤总时间 cook_time=0,状态 cook_state=‘生的’,调料列表 condiments=[]。
    3. cook 方法:传入时间,必须使用 += 累加时间,再用 if…elif 更新状态。
    4. add_condiment 方法:使用列表的 append 添加调料。
    5. str方法:格式化返回对象信息。
  • (3) 代码实现
    classSweetPotato:def__init__(self):self.cook_time=0self.cook_state='生的'self.condiments=[]defcook(self,time):# [教学重难点]:这里必须是累加,而不是直接赋值!self.cook_time+=timeif0<=self.cook_time<3:self.cook_state='生的'elif3<=self.cook_time<7:self.cook_state='半生不熟'elif7<=self.cook_time<=12:self.cook_state='熟了'else:self.cook_state='已烤焦,糊了'defadd_condiment(self,condiment):self.condiments.append(condiment)def__str__(self):returnf"总时长:{self.cook_time}分钟 | 状态:{self.cook_state}| 调料:{self.condiments}"# 测试验证potato=SweetPotato()potato.cook(2)# 烤2分钟print(potato)potato.cook(6)# 再烤6分钟,总时间应该是8分钟potato.add_condiment("辣椒面")print(potato)
http://www.jsqmd.com/news/904900/

相关文章:

  • 在线去本地视频水印的工具推荐:一篇实测横评看完
  • AI浪潮来袭:小白程序员如何把握机遇,成为超级个体并收藏这份成长指南?
  • 告别卡顿!实测对比:Parallels Desktop vs. VMware Fusion vs. UTM,谁才是Mac上跑Win10的最佳选择?
  • Path of Building PoE2终极指南:流放之路2最强构建规划工具完全教程
  • 2026农用薄膜十大品牌排行榜-农用薄膜哪个牌子好-大家比精选排行榜单 - GrowthUME
  • BOM 核心对象
  • Arduino生日音乐盒制作:从硬件选型到代码调试全解析
  • 【限时解禁】Sora 2多角色视频生成私有Prompt语法手册(OpenAI内部培训PPT第47–89页原图直出)
  • 手把手教你学Simulink——UPS系统中双向DC-AC逆变器的并联均流控制仿真
  • 推荐1款提升办公效率的神级软件,简真是Windows神器!
  • 【 linux 】认识make和makefile
  • 2026年4月高架库定做厂家有哪些,自动化立体仓库/高架库/立体仓储/智能仓库/智能仓储/立体仓库,高架库优质厂家推荐 - 品牌推荐师
  • 6.1 机器学习概述
  • 效率直接起飞!2026年真正好用的专业AI论文平台
  • FastbootEnhance:告别复杂命令行,Windows上最直观的Android设备管理工具
  • 大数定律:只要时间足够长,离谱的事情一定会发生
  • 2000-2024年 县域年末金融机构贷款余额、金融机构储蓄存款余额数据 xlsx
  • 如何快速完成微信聊天记录备份:面向普通用户的完整指南
  • 别再纠结了!RTL8367系列五款千兆交换机芯片怎么选?一张图帮你搞定(附硬件开发包获取)
  • 2026广州注册公司靠谱财税公司推荐|本地创业者实测5家优质代办机构 - GrowthUME
  • Sora 2生成电影预告片的底层逻辑(帧间物理引擎+叙事张力算法首次公开)
  • 收藏!普通人也能抓住的AI大模型应用开发机遇,高薪就在眼前!
  • AI写代码真能提效30%?程序员小白必看,收藏这篇避坑指南!
  • 豆包视频去水印方法实测:4款工具横评推荐
  • 基于PyTorch的VGG19图像分类——从CPU到DLP的完整实践
  • 手把手教你学Simulink——电动汽车V2G(车网互动)双向DC-AC充电逆变器建模
  • BG3模组管理器终极指南:5步解决模组冲突,轻松管理《博德之门3》模组
  • 基于Arduino的智能植物监测系统DIY:从传感器到低功耗设计
  • 终极指南:如何用SleeperX彻底掌控Mac睡眠行为
  • P1325 雷达安装【洛谷算法习题】