对不起,如果我的问题错了,但我想知道。在
class MyCustomException(KeyError):
def __init__(self, *args):
super().__init__(*args)
def method(d):
return d['name']
try:
d = {"value": 1}
method(d)
except MyCustomException:
print('got it')
但它不起作用!我没法发现例外。这种行为是否打破了坚实的原则,利斯科夫替代原则?在
Tags:
引用文件,section 8.3:
然而,这段代码并没有破坏替换原则,因为子类当然提供了与基类相同的方法,如果它们没有以偏离基类行为的方式被重写,但您的代码不会这样做。在
顺便说一句,你不必实现任何以这种方式“重命名”类的方法。您可以简单地执行以下操作:
您需要显式地抛出自定义异常。在
Liskov替换本质上意味着:如果我有一个类,并且我将其子类化,那么这个子类应该能够以与超级类完全相同的方式工作,如果作为一个超类使用的话。在
换句话说,我创建了一个可以接受白面包和小麦面包的类
Baker
。如果我将Baker
子类化为一个只接受白面包的类ArtisanBaker
,那么我现在已经破坏了Liskov替换。我不能再把ArtisanBaker
简单地用作Baker
。在相关问题 更多 >
编程相关推荐