⚠️ 正方形是长方形,成立吗
数学上正方形确实是一种长方形。但把 Square 做成 Rect 的子类,问题在于【0】。
开始练习 →
子类重写方法时,能不能收紧要求
父类的方法接受任意正整数,子类重写后只接受偶数。这么做【0】。
开始练习 →
构造里那句 super 干什么用
子类构造里调 super().__init__(...),作用是【0】。
开始练习 →
🔴 同一个函数,喂子类进去就不对了
一个函数只做一件事:把宽改成 10,然后返回面积。调用方拿的是"长方形",预期是 10 乘原来的高。两个对象各喂一次: class Rect: def __init__(self, w, h):
开始练习 →
父类的初始化谁来调
给长方形加一个名字。补上构造里漏掉的那一句。
开始练习 →
🔴 把"预期"和"实际"摆在一起
把长方形的结果、正方形的结果、以及调用方对正方形的预期三个数一起输出。
开始练习 →
⚠️ 修法:让它们做兄弟,不做父子
既然"正方形 is-a 长方形"站不住,就让两者都继承一个只承诺"能算面积"的父类。把 Square 写出来。
开始练习 →
「has-a」和「is-a」怎么分
判断该用组合还是继承,最好用的一句话是【0】。
开始练习 →
⚠️ 「组合优于继承」说的是什么
这句老话的意思是【0】。
开始练习 →
继承带来的那个额外麻烦是什么
用继承复用代码,附带的麻烦是【0】。
开始练习 →