⚠️ 正方形是长方形,成立吗

数学上正方形确实是一种长方形。但把 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】。

开始练习 →