gpt4 book ai didi

oop - 向子类添加公共(public)方法是否违反 LSP(Liskov 替换原则)?

转载 作者:行者123 更新时间:2023-12-01 10:47:18 24 4
gpt4 key购买 nike

如果我将公共(public)方法添加到子类并且客户端程序调用添加的方法,则客户端程序不能使用父对象而不是子类。

import unittest

class BaseClass(object):

def doSomething(self):
pass


class SubClass(BaseClass):

def doStuff(self):
pass

class Client(object):

def __init__(self, obj):
self.obj = obj

def do(self):
self.obj.doStuff()

class LSPTestCase(unittest.TestCase):

def test_call_subclass_method(self):
client = Client(SubClass())
client.do()

def test_call_baseclass_method(self):
client = Client(BaseClass())
with self.assertRaises(AttributeError):
client.do()

if __name__ == '__main__':
unittest.main()

这种情况违反了LSP?

最佳答案

不,只要从父类继承的所有方法都遵循与父类相同的约定,那么 LSP 就会被保留。

LSP 的重点是能够毫无问题地将子类作为父类传递。它没有说明不能为附加功能而沮丧。

关于oop - 向子类添加公共(public)方法是否违反 LSP(Liskov 替换原则)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24408748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com