🔴 同一个函数,喂子类进去就不对了
一个函数只做一件事:把宽改成 10,然后返回面积。调用方拿的是"长方形",预期是 10 乘原来的高。两个对象各喂一次:
class Rect:
def __init__(self, w, h):
self._w, self._h = w, h
def set_w(self, w):
self._w = w
def area(self):
return self._w * self._h
class SquareBad(Rect):
"""把正方形做成长方形的子类"""
def __init__(self, s):
super().__init__(s, s)
def set_w(self, w):
self._w = w
self._h = w # 不同时改,它就不是正方形了
def stretch_to_10(r):
"""调用方拿的是"长方形":把宽改成 10,面积应该是 10 乘原来的高"""
r.set_w(10)
return r.area()
print(str(stretch_to_10(Rect(3, 4))) + "/"
+ str(stretch_to_10(SquareBad(5))))
全部评论