Add Day_12: 面向对象(二)继承与__str__
This commit is contained in:
@@ -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() # 我是狗 / 我是动物
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user