【发布时间】:2014-08-16 00:30:23
【问题描述】:
如果我向子类添加公共方法并且客户端程序调用添加的方法,客户端程序不能使用父对象而不是子类。
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说子类可以代替父类,并不是说父类可以代替子类。
-
这是什么语言?
-
@weston 这个语言是 Python
标签: oop solid-principles liskov-substitution-principle