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

📅 2026/7/24 14:24:17 👁️ 阅读次数 📝 编程学习
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 的核心编程范式,掌握好类与对象、继承、魔法方法等知识,你就能写出更加优雅、可维护的代码。多敲代码、多实践,自然就能熟练运用!

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