From f662556cc1b7e8d768a7d188feb69e9a2937ccea Mon Sep 17 00:00:00 2001 From: lkjing2021345 <1908499668@qq.com> Date: Sat, 22 Aug 2026 01:09:36 +0800 Subject: [PATCH] =?UTF-8?q?Add=20Day=5F12:=20=E9=9D=A2=E5=90=91=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1(=E4=BA=8C)=E7=BB=A7=E6=89=BF=E4=B8=8E=5F=5Fstr=5F=5F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Day_12/README.md | 100 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Day_12/README.md diff --git a/Day_12/README.md b/Day_12/README.md new file mode 100644 index 0000000..47d5a12 --- /dev/null +++ b/Day_12/README.md @@ -0,0 +1,100 @@ +# Day_12 · 面向对象(二):继承与 __str__ + +> 预计耗时:25~30 分钟 +> Django 里所有模型都写 `class Article(models.Model)`——`models.Model` 就是被继承的"基类"。 +> 今天亲手写一次继承,你就明白 Django 的模型为什么"自带保存能力"。 + +## 今日知识点 + +- **继承**:`class Dog(Animal):` —— Dog 是 Animal 的"子类",自动拥有 Animal 的全部方法 +- **重写**:子类里再写一遍同名方法,就覆盖父类的实现 +- **`super()`**:在子类方法里调用父类的方法(`super().方法()`) +- **`__str__`**:定义"这个对象打印出来长什么样"(`print(对象)` 时触发) + +## 先学(教程) + +- 菜鸟教程("面向对象"一节,重点看**继承**部分):https://www.runoob.com/python3/python3-class.html +- B站黑马教程(看讲"继承"的几集):https://www.bilibili.com/video/BV1qW4y1a7fU/ + +## 任务(后做) + +新建 `day12.py`: + +1. 基类 + 两个子类: + ```python + class Animal: + def __init__(self, name): + self.name = name + + def speak(self): + print("...") + + class Dog(Animal): + def speak(self): # 重写:覆盖父类 + print(f"{self.name}:汪汪!") + + class Cat(Animal): + def speak(self): + print(f"{self.name}:喵喵!") + + d = Dog("旺财") + c = Cat("咪咪") + d.speak() # 旺财:汪汪! + c.speak() # 咪咪:喵喵! + ``` +2. 给 Animal 加 `__str__` 方法: + ```python + # 在 Animal 类里加: + def __str__(self): + return self.name + + print(d) # 打印出来是 旺财 而不是 <__main__.Dog object at ...> + ``` +3. **进阶(加分)**:用 `super()`——给 Animal 加一个 `info()` 方法打印 `我是动物`, + 然后让 Dog 重写 `info()`:先打印 `我是狗`,再调用 `super().info()`, + 调用 `d.info()` 观察两行输出和顺序。 + +## 完成标准 + +- [ ] 汪汪 / 喵喵 输出正确 +- [ ] `print(d)` 显示的是狗名 +- [ ] 能说出"子类自动拥有父类的方法"这句话的意思 +- [ ] (进阶)super() 两行输出顺序正确 + +**提交方式**:把 `day12.py` 代码贴在当日工单评论里。 + +## 参考解答(先做再看) + +```python +class Animal: + def __init__(self, name): + self.name = name + + def speak(self): + print("...") + + def __str__(self): # 打印对象时显示的名字 + return self.name + + def info(self): + print("我是动物") + +class Dog(Animal): + def speak(self): + print(f"{self.name}:汪汪!") + + def info(self): # 进阶:super() + print("我是狗") + super().info() # 调用父类的 info + +class Cat(Animal): + def speak(self): + print(f"{self.name}:喵喵!") + +d = Dog("旺财") +c = Cat("咪咪") +d.speak() +c.speak() +print(d) # 旺财 +d.info() # 我是狗 / 我是动物 +```