尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

Python 面向对象编程完全指南:从入门到精通
📅 发布时间:2026/7/24 14:24:17

📢 大家好!今天我们来深入学习 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 的核心编程范式,掌握好类与对象、继承、魔法方法等知识,你就能写出更加优雅、可维护的代码。多敲代码、多实践,自然就能熟练运用!

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

相关新闻

  • 2026年5款AI求职工具深度盘点:从简历到Offer的全流程助攻 - nut-king
  • 多模态大模型与RAG技术在影视解说文案生成中的应用
  • 130、NPU的仿真测试:使用Gem5进行全系统仿真

最新新闻

  • 专业无损检测设备加持,哈尔滨名表回收精细化鉴定精准核算腕表价值 - 生活商业速报
  • C++ const与指针深度解析:函数传参设计哲学与工程实践
  • 卷积神经网络认证训练:防御卷积扰动的PyTorch实战指南
  • 基于Transformer的风电功率预测算法优化与实践
  • PDF转Word排版乱了怎么修复?六大常见问题逐一调回原样
  • 2026大模型技术栈:架构演进与推理优化实战

日新闻

  • 武汉卡地亚LOVE钻戒与钻石项链回收变现攻略|多家门店行情参考 - 大牌深度测评
  • 2026年无锡地区健康管理如何考量?四家机构业务体系概览
  • 2026图片去水印软件哪个好用 手机电脑免费工具盘点 - 免费软件工具方法教程

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号