一、知识衔接:从模块化到面向对象
前四篇核心能力:
✅ 基础语法 ✅ 模块化编程 ✅ 标准库应用 ✅ 项目实战
本篇新维度:
graph LR
A[模块化编程] --> B[面向对象]
B --> C[类与对象]
B --> D[属性与方法]
B --> E[封装特性]
二、面向对象编程(OOP)是什么?
1. 现实世界比喻
-
类(Class):像建筑设计蓝图(例如:"汽车设计图")
-
对象(Object):根据蓝图建造的具体实物(例如:"一辆红色宝马轿车")
2. 程序中的体现
# 类的定义
class Diary:
"""日记本类"""
def __init__(self, author):
self.author = author # 属性:作者
self.entries = [] # 属性:日记列表
def add_entry(self, content): # 方法:添加日记
self.entries.append(content)
# 创建对象
my_diary = Diary("小明")
my_diary.add_entry("今天学会了面向对象!")
三、类的三大基础要素(手把手教学)
1. 属性:对象的特征
class Student:
def __init__(self, name, age):
self.name = name # 姓名属性
self.age = age # 年龄属性
# 创建学生对象
stu1 = Student("李雷", 18)
print(f"{stu1.name}今年{stu1.age}岁")
2. 方法:对象的行为
class Calculator:
def add(self, a, b): # 加法方法
return a + b
def multiply(self, a, b): # 乘法方法
return a * b
# 使用计算器对象
calc = Calculator()
print("3 + 5 =", calc.add(3, 5))
3. 初始化方法 __init__
class Book:
def __init__(self, title, page=100):
self.title = title # 必须传入书名
self.page = page # 默认100页
def read(self):
print(f"正在阅读《{self.title}》(共{self.page}页)")
# 创建书籍对象
python_book = Book("Python入门教程", 200)
python_book.read()
四、综合实战:用类重构日记本系统
1. 类设计蓝图
class DiarySystem:
def __init__(self, username):
self.username = username
self.diary_folder = f"{username}_diary"
os.makedirs(self.diary_folder, exist_ok=True)
def write(self, content):
"""写入日记"""
filename = datetime.now().strftime("%Y%m%d.txt")
path = os.path.join(self.diary_folder, filename)
with open(path, "a", encoding="utf-8") as f:
f.write(f"{datetime.now()}\n{content}\n\n")
def read(self, date_str):
"""读取指定日期日记"""
filename = f"{date_str}.txt"
path = os.path.join(self.diary_folder, filename)
try:
with open(path, "r") as f:
return f.read()
except FileNotFoundError:
return "当天没有日记"
2. 使用面向对象系统
# 初始化系统
my_diary = DiarySystem("xiaoming")
# 写日记
my_diary.write("用面向对象重构了日记本系统!")
# 读日记
print(my_diary.read("20240301")) # 假设当天写过日记
五、扩展功能:添加用户登录验证
class User:
def __init__(self, username, password):
self.username = username
self.__password = password # 私有属性(封装特性)
def check_password(self, input_pwd):
return self.__password == input_pwd
class AuthDiarySystem(DiarySystem):
def __init__(self, user):
super().__init__(user.username)
self.user = user
def start(self):
pwd = input("请输入密码:")
if self.user.check_password(pwd):
print("登录成功!")
# 调用父类的日记操作...
else:
print("密码错误!")
# 创建用户
user1 = User("admin", "123456")
system = AuthDiarySystem(user1)
system.start()
六、避坑指南
1. 常见错误场景
# 错误1:忘记self参数
class Test:
def wrong_method(): # ❌ 缺少self
print("错误方法")
# 正确写法
class Test:
def right_method(self): # ✅
print("正确方法")
2. 类与模块的选择时机
-
使用类:需要维护状态(属性)和行为的场景
-
使用模块:提供工具函数的集合
学习路线建议
1. 今日练习任务
# 任务:设计一个「学生成绩管理系统」类
# 要求包含:
# - 属性:学生姓名、科目成绩字典
# - 方法:添加成绩、计算平均分、显示成绩单
class GradeManager:
def __init__(self, name):
self.name = name
self.grades = {}
# 补全方法...
2. 学习技巧
-
用现实物品做类比(手机类、汽车类等)
-
先画UML草图再写代码
-
多观察标准库的类设计(如datetime模块)
📢 下期预告:Python高级特性:装饰器与生成器实战
🚀 系列预告:完成本系列后,你将具备开发完整Python应用的能力!