里氏代換原則(Liskov Substitution Principle,LSP)是面向?qū)ο笤O(shè)計(jì)原則的一部分,它強(qiáng)調(diào)子類對(duì)象應(yīng)該能夠替換其父類對(duì)象而不影響程序的正確性。換句話說,子類對(duì)象應(yīng)該可以在不改變程序正確性的前提下替換掉父類對(duì)象。
該原則的實(shí)現(xiàn)原理可以通過以下幾點(diǎn)來說明:
-
子類必須完全實(shí)現(xiàn)父類的抽象方法: 子類繼承父類時(shí),必須實(shí)現(xiàn)父類中聲明的所有抽象方法,并且保持方法簽名和語(yǔ)義的一致性。
-
子類可以具有比父類更廣的行為: 子類可以擴(kuò)展父類的功能,但不能收縮或修改父類已有的功能。也就是說,子類可以在父類的行為基礎(chǔ)上進(jìn)行擴(kuò)展,但不能修改或刪除父類已有的行為。
-
子類返回類型必須與父類兼容: 子類方法的返回類型必須與父類方法的返回類型兼容,這意味著子類方法的返回值可以是父類方法返回值的子類型。
在 Python 中,實(shí)現(xiàn)里氏代換原則可以通過以下方式:文章來源:http://www.zghlxwxcb.cn/news/detail-861688.html
# 抽象類 計(jì)算面積函數(shù)
class Shape:
def area(self):
pass
''' 解藕 '''
# 繼承,子類
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
class Square(Shape):
def __init__(self, side_lenth):
self.side_length = side_lenth
def area(self):
return self.side_length ** 2
# 計(jì)算面積
'''
由于 Rectangle 和 Square 都是 Shape 的子類,并且都實(shí)現(xiàn)了 area() 方法
所以它們可以 在不影響程序正確性的前提下 替換 Shape 對(duì)象。這符合里氏代換原則的要求
'''
def cal_area(shape):
return shape.area()
rectangle = Rectangle(2,3)
square = Square(5)
print(cal_area(rectangle))
print(cal_area(square))
6
25文章來源地址http://www.zghlxwxcb.cn/news/detail-861688.html
到了這里,關(guān)于設(shè)計(jì)模式:里氏代換原則(Liskov Substitution Principle,LSP)介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!