Files
PythonLearn/03_面向对象/3_1_Python与Java的类和对象/practice.py

83 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第 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. 是否没有在类外直接替学习者写出答案。