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