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

Python 面向对象编程完全指南:从入门到精通

📢 大家好!今天我们来深入学习 Python 面向对象编程(OOP)的核心知识。这篇文章涵盖了面向对象的基本概念、类的定义与使用、魔法方法、继承等核心内容,通过丰富的案例帮助大家彻底掌握 OOP。


📚 目录

  • 一、面向对象与面向过程

  • 二、面向对象三大特征

  • 三、类与对象入门

  • 四、self 关键字详解

  • 五、属性操作

  • 六、魔法方法

  • 七、继承

  • 八、综合案例

  • 九、总结


一、面向对象与面向过程

1.1 编程思想

编程思想就是人们利用计算机来解决问题的思维方式。

1.2 面向过程

它是一种编程思想,强调的是以步骤(过程)为基础完成各种操作。

特点:

  • 关注"怎么做"

  • 按照流程一步步执行

  • 适合简单、固定的任务

1.3 面向对象

它是一种编程思想,强调的是以对象为基础完成各种操作,它是基于面向过程的。

思想特点:

  1. 更符合人们的思考习惯——用"谁做了什么"来思考问题

  2. 把复杂的事情简单化——将大问题拆解成小对象

  3. 把人从执行者变成指挥者——你指挥对象去干活

举例说明:

买电脑

  • 面向过程:自己查配置→去电脑城→比价→砍价→买回家

  • 面向对象:找懂电脑的朋友(对象)→朋友帮你搞定一切

洗衣服

  • 面向过程:拿衣服→放水→加洗衣液→搓洗→漂洗→拧干→晾晒

  • 面向对象:把衣服扔进洗衣机(对象)→按按钮→洗衣机帮你洗完

总结:万物皆对象


二、面向对象三大特征

2.1 封装

概述:隐藏对象的属性和实现细节,仅对外提供公共的访问方式。

举例

  • 电脑:你不需要知道 CPU 怎么工作,只需要用键盘鼠标操作

  • 手机:你不需要知道内部电路,只需要点屏幕

  • 函数:你只需要调用,不需要知道内部实现

好处

  • ✅ 提高代码的安全性(私有化)

  • ✅ 提高代码的复用性(函数封装)

2.2 继承

概述:子类继承父类的成员(属性、行为等)。大白话:子承父业

好处:✅ 提高代码的复用性

2.3 多态

概述

  • 大白话:同一个事物在不同时刻表现出来的不同状态、形态

  • 专业版:同一个函数,接收不同的对象,有不同的效果


三、类与对象入门

3.1 核心概念

概念说明示例
抽象的概念,是属性+行为的集合汽车设计图
对象类的具体体现、实例根据设计图造出来的汽车
属性(名词)描述事物的外在特征颜色、品牌、价格
行为(动词)描述事物能做什么跑、停、鸣笛

3.2 定义类的格式

class 类名: # 属性(变量) # 行为(函数)

3.3 入门案例:汽车类

""" 需求:定义汽车类,有跑的行为 """ # 1. 定义汽车类(类名遵循大驼峰命名法) class Car: # 属性(名词) # 行为(动词) def run(self): print('汽车会跑!') # 2. 创建汽车类的对象 c1 = Car() # 3. 调用 Car 类的 run() 函数 c1.run() # 输出: 汽车会跑!

3.4 访问类中成员的格式

# 1. 创建对象 对象名 = 类名() # 2. 通过 对象名. 的方式调用 对象名.属性名 对象名.行为名()

四、self 关键字详解

4.1 什么是 self

  • 概述self是 Python 内置的关键字,用于表示本类当前对象的引用

  • 大白话谁调用函数,self就代表谁

4.2 self 的作用

1 个类可以有多个对象,这多个对象都可以通过对象名.的方式访问类中的行为(函数)。函数通过self来区分到底是哪个对象调用的该函数。

class Car: def run(self): print(f'汽车会跑!self的值是: {self}') c1 = Car() print(f'c1对象: {c1}') c1.run() # self 指向 c1 c2 = Car() print(f'c2对象: {c2}') c2.run() # self 指向 c2

4.3 类内访问其他函数

总结:

  • 类外访问类中的行为,通过对象名.的方式

  • 类内访问类中的行为,通过self.的方式

class Car: def run(self): print(f'{self} 汽车在跑...') def work(self): print(f'我是work函数,self值: {self}') self.run() # 在类内访问其他函数,用 self. c1 = Car() c1.work() # 输出: 我是work函数... 汽车在跑...

五、属性操作

5.1 类外设置和获取属性

class Car: def run(self): print('汽车会跑...') # 创建对象 c1 = Car() # 类外设置属性(独属于 c1 对象) c1.color = '红色' c1.number = 4 # 类外获取属性 print(f'颜色: {c1.color}, 轮胎数: {c1.number}') # 输出: 颜色: 红色, 轮胎数: 4

5.2 类内获取对象的属性

class Car: def run(self): print('汽车会跑') def show(self): # 在类内通过 self. 访问属性 print(f'颜色: {self.color}, 轮胎数: {self.number}') c1 = Car() c1.color = '红色' c1.number = 4 c1.show() # 输出: 颜色: 红色, 轮胎数: 4

⚠️ 注意:类外设置的属性只属于当前对象,其他对象没有该属性。


六、魔法方法

6.1 什么是魔法方法

魔法方法是 Python 内置的函数,在满足特定的场景下会被自动调用

魔法方法触发时机
__init__()创建对象时自动调用
__str__()print(对象)时自动调用
__del__()对象被销毁时自动调用

6.2__init__()魔法方法(构造方法)

无参版
class Car: def __init__(self): print('我是无参 init 魔法方法') self.color = '黑色' # 默认属性 self.number = 3 def show(self): print(f'颜色: {self.color}, 轮胎数: {self.number}') c1 = Car() # 自动调用 __init__() c1.show() # 输出: 颜色: 黑色, 轮胎数: 3
有参版(推荐)
class Car: def __init__(self, color, number): """在创建对象时,给属性赋值""" self.color = color self.number = number def show(self): print(f'颜色: {self.color}, 轮胎数: {self.number}') c1 = Car('红色', 6) # 传入参数 c1.show() # 输出: 颜色: 红色, 轮胎数: 6

6.3__str__()魔法方法

class Car: def __init__(self, color, number): self.color = color self.number = number def __str__(self): # 重写,打印有意义的属性信息 return f'颜色: {self.color}, 轮胎数: {self.number}' c1 = Car('绿色', 4) print(c1) # 自动调用 __str__(),输出: 颜色: 绿色, 轮胎数: 4

6.4__del__()魔法方法

class Car: def __init__(self, brand): self.brand = brand def __str__(self): return f'品牌: {self.brand}' def __del__(self): print(f'{self} 对象被删除了!') c1 = Car('小米 Su7 Ultra') print(c1) del c1 # 手动删除,触发 __del__()

七、继承

7.1 继承入门

概念说明
继承子类继承父类的属性和行为(子承父业)
子类/派生类继承别的类的类
父类/基类/超类被继承的类
好处提高代码的复用性
弊端耦合性增强,父类不好的内容子类也得有

开发原则高内聚、低耦合

7.2 继承的基本格式

class 父类名: # 父类成员 class 子类名(父类名): pass # 子类自动拥有父类的所有成员

7.3 单继承演示

# 1. 定义师傅类 class Master: def __init__(self): self.kongfu = '[古法配方]' def make_cake(self): print(f'采用 {self.kongfu} 摊煎饼果子') # 2. 定义徒弟类,继承师傅类 class Prentice(Master): pass # 3. 测试 p = Prentice() p.make_cake() # 输出: 采用 [古法配方] 摊煎饼果子

7.4 多继承演示

class Master: def __init__(self): self.kongfu = '[古法配方]' def make_cake(self): print(f'运用 {self.kongfu} 制作煎饼果子') class School: def __init__(self): self.kongfu = '[AI配方]' def make_cake(self): print(f'运用 {self.kongfu} 制作煎饼果子') # 多继承:从左往右,就近原则 class Prentice(School, Master): pass xm = Prentice() print(xm.kongfu) # 输出: [AI配方](School 的) xm.make_cake() # 输出: 运用 [AI配方] 制作煎饼果子

7.5 MRO 机制

MRO(Method Resolution Order)可以查看某个对象调用函数时的查找顺序

print(Prentice.mro()) # Prentice -> School -> Master -> object print(Prentice.__mro__) # 同上

八、综合案例

8.1 减肥案例

""" 需求:小明当前体重 100kg,跑步一次减 0.5kg,大吃大喝一次增 2kg """ class Student: def __init__(self): self.current_weight = 100 def run(self): print('疯狂跑步...') self.current_weight -= 0.5 def eat(self): print('大吃大喝一顿...') self.current_weight += 2 def __str__(self): return f'当前体重: {self.current_weight} kg!' xm = Student() xm.run() xm.run() xm.eat() print(xm) # 当前体重: 101.0 kg!

8.2 烤地瓜案例

""" 需求: 1. 属性:烘烤时间、烘烤状态、调料列表 2. 行为:烘烤、添加调料 3. 规则: [0, 3) → 生的 [3, 7) → 半生不熟 [7, 12) → 熟了 [12, ∞] → 糊了 """ class SweetPotato: def __init__(self): self.cook_time = 0 self.cook_state = '生的' self.condiments = [] def cook(self, time): self.cook_time += time if 0 <= self.cook_time < 3: self.cook_state = '生的' elif 3 <= self.cook_time < 7: self.cook_state = '半生不熟' elif 7 <= self.cook_time < 12: self.cook_state = '熟了' else: self.cook_state = '糊了' def add_condiment(self, condiment): self.condiments.append(condiment) def __str__(self): return f'烘烤时间: {self.cook_time}, 状态: {self.cook_state}, 调料: {self.condiments}' dg = SweetPotato() dg.cook(3) dg.cook(5) dg.cook(7) dg.add_condiment('芥末') dg.add_condiment('折耳根') print(dg) # 烘烤时间: 15, 状态: 糊了, 调料: ['芥末', '折耳根']

九、总结

9.1 核心知识点速记

概念要点
面向对象以对象为基础,更符合人类思维
三大特征封装、继承、多态
类与对象类是图纸,对象是实物
self代表当前对象的引用
__init__创建对象时自动调用,初始化属性
__str__print(对象)时自动调用
__del__对象销毁时自动调用
继承子类继承父类的属性和行为
多继承从左往右,就近原则

9.2 创建类的三种格式

# 格式1 class 类名: pass # 格式2 class 类名(): pass # 格式3(推荐) class 类名(object): # object 是所有类的父类 pass

9.3 访问方式总结

位置访问方式
类外对象名.成员
类内self.成员

📝最后提醒:面向对象编程是 Python 的核心编程范式,掌握好类与对象、继承、魔法方法等知识,你就能写出更加优雅、可维护的代码。多敲代码、多实践,自然就能熟练运用!

如果觉得有帮助,欢迎点赞、收藏、评论!😊

http://www.jsqmd.com/news/1254776/

相关文章:

  • 高速ADC选型与性能评估:从数据手册到系统设计实战
  • RynnWorld-Teleop:一种用于数字遥操作的动作条件世界模型
  • AI开发必备:数学基础与核心算法解析
  • 普通财务看数字,高手财务用这9个财务分析模型找问题!
  • AI生成图片版权风险测试方法论
  • 孤能子视角:具身智能论——从“具身观察符”到“术法道伦理”的完整投射
  • 2026年5款AI求职工具深度盘点:从简历到Offer的全流程助攻 - nut-king
  • 首发!宣城高考滑档/单招落榜生必看:公办国际预科班启动,稳拿全日制公办大专学籍 - 小张zc
  • GEO服务商口碑好评综合推荐:全新榜单发布2026年7月权威对全域AI推广优化服务商横评 - 信息热点
  • 8位 ALU 算术逻辑单元 FPGA 设计 VHDL Quartus
  • 研究生科研效率工具推荐与使用指南 助力提升科研产出效率与学术创新能力
  • 130、NPU的仿真测试:使用Gem5进行全系统仿真
  • 国内口碑好的异构烷烃IP40.IP60.IP80.IP100供应商哪家强
  • CC1020窄带射频收发器硬件设计:从原理图到PCB布局的实战指南
  • Red Hat容器技术实践:从Podman基础到安全部署
  • DRA79x引脚复用配置实战:PWM与PRU-ICSS子系统避坑指南
  • 军工级高强度透明防爆玻璃工程厂家 - 优企甄选
  • C++开发跨平台数学游戏APP:架构设计与工程实践详解
  • YOLOv6集成CAFM模块提升目标检测噪声鲁棒性
  • OpenClaw 切换 Kimi 系列模型,Moonshot 账号充值与密钥创建(含安装包)
  • 多模态大模型与RAG技术在影视解说文案生成中的应用
  • GitHub开源项目破圈方法论:从技术自嗨到生态共建
  • 旧衣服回收哪个平台价格高?2026年爱宝拉回收报价解析与避坑指南 - 快递物流资讯
  • AI智能降重工具在学术写作中的应用与技巧
  • AI数字内容生产系统:30天打造多平台高效创作流水线
  • MSP430FR599x超低功耗MCU实战:FRAM与LEA加速器在嵌入式系统中的应用
  • AI图片生成工具评估:主体控制力与风格表现力解析
  • 大模型技术在公路视频监控中的智能化应用实践
  • 腾讯会议协议唤起技术:一键入会原理与企业部署实战
  • TI 66AK2G12时钟与时序设计:从PLL配置到PCB布局的实战指南