feat(面向对象): 完成第三阶段差异化课程

This commit is contained in:
zhiye.sun
2026-08-11 17:53:53 +08:00
parent b348dc0a1f
commit f1d9548646
16 changed files with 2131 additions and 14 deletions

View File

@@ -0,0 +1,82 @@
# 第 3-1 课课堂练习Python 与 Java 的类和对象
#
# 这份练习把关键差异直接写进题目,不要求先完整阅读讲义。
# 请先独立完成;不要删除题目、预期输出和自查说明。
# 第一部分:定义 Book 类
# 1. 不要像 Java 一样预先声明 title、author、price 字段。
# 2. 定义 __init__(self, title, author, price=0.0) 方法。
# 3. 为 title 和 author 添加 str 类型注解,为 price 添加 float 类型注解。
# 4. 返回值标注为 None。
# 5. 在 __init__ 中通过 self.title、self.author、self.price 创建实例属性。
#
# Java 对照提醒:
# - Python 的 __init__ 承担初始化职责,但不是“与类同名的构造器”;
# - self 类似 Java 的 this但必须写在方法参数列表中
# - 创建对象时不写 new也不手动传入 self。
# 第二部分:定义实例方法 get_summary(self)
# 1. 返回值标注为 str。
# 2. 返回格式书名《Python 后端开发》作者小明价格59.0 元。
# 3. 必须通过 self 读取三个实例属性。
#
# Java 对照提醒:
# - Python 方法没有 public 关键字;
# - 调用时写 book.get_summary()Python 会自动把 book 传给 self。
# 第三部分:添加类属性 category
# 1. 在 Book 类中、所有方法外定义 category = "编程"。
# 2. 在后面的 main() 中分别使用 Book.category 和 book.category 输出它。
#
# Java 对照提醒:
# - 类属性在用途上类似 Java 的 static 字段;
# - 为避免实例属性遮蔽类属性,本题不要执行 book.category = ...。
# 第四部分:定义类方法 from_text(cls, text)
# 1. 在方法上方添加 @classmethod。
# 2. text 的格式固定为“书名|作者”,例如“流畅的 Python|Luciano”。
# 3. 使用 text.split("|") 得到书名和作者。
# 4. 使用 cls(title, author) 创建并返回对象,让 price 使用默认值。
#
# Java 对照提醒:
# - cls 指向当前类classmethod 常用于实现命名工厂;
# - 不要把类名 Book 写死在 return 中,使用 cls 更利于继承。
# 第五部分:定义静态方法 is_valid_price(price)
# 1. 在方法上方添加 @staticmethod。
# 2. price 标注为 float返回值标注为 bool。
# 3. price 大于或等于 0 时返回 True否则返回 False。
#
# Java 对照提醒:
# - staticmethod 不接收 self 或 cls
# - 当逻辑与 Book 有关、但不需要对象状态和类状态时,可以使用它。
# 第六部分:定义 main() 并完成运行验证
# 1. 使用 Book("Python 后端开发", "小明", 59.0) 创建 book注意不写 new。
# 2. 输出 book.get_summary()。
# 3. 分别通过类和对象输出 category。
# 4. 使用 Book.from_text("流畅的 Python|Luciano") 创建 imported_book。
# 5. 输出 imported_book.get_summary(),其价格应为默认值 0.0。
# 6. 输出 Book.is_valid_price(59.0) 和 Book.is_valid_price(-1.0)。
# 7. 添加程序入口判断,直接运行本文件时调用 main()。
#
# 预期输出:
# 书名《Python 后端开发》作者小明价格59.0 元
# 通过类读取分类:编程
# 通过对象读取分类:编程
# 书名:《流畅的 Python》作者Luciano价格0.0 元
# 59.0 是合法价格True
# -1.0 是合法价格False
# 完成后自查:
# 1. 是否能解释 self 与 Java this 的相同点和写法差异;
# 2. 是否记住 Python 创建对象时不写 new
# 3. 是否知道 __init__ 负责初始化,而不是 Java 式的同名构造器;
# 4. 是否能区分实例属性、类属性、实例方法、类方法和静态方法;
# 5. 是否没有在类外直接替学习者写出答案。