news 2026/5/28 18:55:06

Python进阶 面向对象基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 18:54:12

学习JS第十一天(JS的进阶)

作用域局部作用域全局作用域作用域链&#xff08;八股&#xff09;JS垃圾回收机制算法说明引用计数法标记清除法闭包变量提升函数进阶函数提升函数参数动态参数剩余参数展开运算符箭头函数&#xff08;重要&#xff09;基本语法箭头函数参数箭头函数this以前的现在的

作者头像 李华
网站建设 2026/5/28 18:52:24

如何快速清理百度文库页面:三步免费获取纯净文档的完整指南

如何快速清理百度文库页面&#xff1a;三步免费获取纯净文档的完整指南 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 百度文库助手是一款开源JavaScript工具&#xff0c;专门用于优化百度文库的…

作者头像 李华
网站建设 2026/5/28 18:48:01

OpenVoiceV2终极指南:免费开源语音克隆与多语言TTS的完整实践

OpenVoiceV2终极指南&#xff1a;免费开源语音克隆与多语言TTS的完整实践 【免费下载链接】OpenVoiceV2 项目地址: https://ai.gitcode.com/hf_mirrors/myshell-ai/OpenVoiceV2 OpenVoiceV2是MyShell AI在2024年4月发布的开源语音合成框架&#xff0c;支持精准音色克隆…

作者头像 李华
网站建设 2026/5/28 18:44:33

消费级降噪耳机改造航空耳机:低成本实现专业级通话与降噪

1. 项目概述&#xff1a;当消费级降噪耳机遇上通用航空作为一名经常在通航圈子里折腾的飞行爱好者和硬件DIYer&#xff0c;我一直在寻找一套既能让耳朵舒服、又能让钱包不哭的航空耳机方案。市面上那些专业品牌&#xff0c;比如Bose A30或者Lightspeed Zulu 3&#xff0c;性能没…

作者头像 李华
网站建设 2026/5/28 18:43:47

5大技术革新重构缠论量化:ChanVis几何交易可视化系统

5大技术革新重构缠论量化&#xff1a;ChanVis几何交易可视化系统 【免费下载链接】chanvis 基于TradingView本地SDK的可视化前后端代码&#xff0c;适用于缠论量化研究&#xff0c;和其他的基于几何交易的量化研究。 缠论量化 摩尔缠论 缠论可视化 TradingView TV-SDK 项目地…

作者头像 李华