Python零基础通关教程(五):面向对象编程入门(用类重构日记本程序)

一、知识衔接:从模块化到面向对象

前四篇核心能力
✅ 基础语法 ✅ 模块化编程 ✅ 标准库应用 ✅ 项目实战
本篇新维度

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应用的能力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值